LinuxShell的 中括号[], 双中括号[[]], 双小括号(()) 笔记231207

240 阅读1分钟

LinuxShell的 中括号[], 双中括号[[]], 双小括号(())

  • 中括号[], 双中括号[[]], 双小括号(()) 都可用于条件判断

  • 双中括号[[]] , 算是 中括号[]的增强 双中括号[[]][[是bash的关键字, 并不是命令

    [remotet@vb-f39 /]$ type [[
    [[ 是 shell 关键字
    
  • 单双中括号[][[]] 既可以用于字符串比较, 也可以用于整数比较 单双等号===用于字符串比较, -eq用于整数比较

  • 双小括号(())只能用于整数比较, 不能用于字符串比较 用=赋值, 用==比较



单等号=和双等号==-eq

中括判字符, 小括判数字

  • 在 中括号[] 双中括号[[]] 中, 单等号=和双等号== 效果相同, 用于字符串判断
if [ "a" = "a" ];
if [ "a" == "a" ];
if [ "$VarName1" = "$VarName2" ];
if [ "$VarName1" == "$VarName2" ];
  • 在双小括号(())中, 单等号=用于赋值 双等号==用于数值大小判断
if (( a==3 ));
if (( $a==3 ));
for((i=0;i<10;i++));
  • 中括号要有空格,双小括号可以没有, 中括号要$,小括号可有可无$
if [ "$v" = "hello" ];
if [ "$v" == "hello" ];
if((v==6));
if(($v==6));
  • 中括号双中括号可以用 -eq 进行整数大小判断, 双小括号不能用-eq
if [ "$v" -eq 6 ];
if [[ "$v" -eq 6 ]];
if((v==6));
if(($v==6));

test, 可粘贴到控制台测试

v="hello"
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
echo "----------------------------------------------------------------"
v=6
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi

测试效果

[z@vb-f39 txt]$ v="hello"
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
echo "----------------------------------------------------------------"
v=6
if [ "$v" = "hello" ]; then  echo yes; else echo no; fi
if [ "$v" == "hello" ]; then  echo yes; else echo no; fi
if [[ "$v" = "hello" ]]; then  echo yes; else echo no; fi
if [[ "$v" == "hello" ]]; then  echo yes; else echo no; fi
if [ "$v" -eq 6 ]; then  echo yes; else echo no; fi
if [[ "$v" -eq 6 ]]; then  echo yes; else echo no; fi
if((v==6)); then  echo yes; else echo no; fi
if(($v==6)); then  echo yes; else echo no; fi
yes
yes
yes
yes
bash: [: hello: 需要整数表达式
no
no
no
no
----------------------------------------------------------------
no
no
no
no
yes
yes
yes
yes