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

2023-12-14 00:05:59

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

对比中括号[]和双中括号[[]]

在Shell中,方括号([])和双层方括号([[ ]])都用于条件测试。它们的功能相似,但双层方括号提供了更多的功能和灵活性。

  1. 单层方括号([]):

    • 用于条件测试,例如判断文件是否存在、判断字符串是否等于某个值等。
    • 不支持正则表达式匹配,只能进行简单的字符串匹配。
    • 不支持逻辑操作符,如-a(与)、-o(或)和!(非)。
  2. 双层方括号([[ ]]):

    • 与单层方括号类似,用于条件测试。
    • 支持正则表达式匹配,可以使用=~操作符进行匹配。
    • 支持逻辑操作符,如-a(与)、-o(或)和!(非)。
    • 提供更好的错误处理和防止字符串拆分和文件名扩展的特性。

下面是一些示例,展示了单层方括号和双层方括号的用法:

使用单层方括号:

if [ -f "file.txt" ]; then
    echo "File exists."
fi

if [ "hello" == "world" ]; then
    echo "Strings are equal."
fi

使用双层方括号:

if [[ -f "file.txt" ]]; then
    echo "File exists."
fi

if [[ "hello" == "world" ]]; then
    echo "Strings are equal."
fi

可以看到,双层方括号提供了更多的功能和灵活性,因此在编写复杂的条件语句时,建议使用双层方括号。

文章来源:https://blog.csdn.net/kfepiza/article/details/134860260
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。