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中,方括号([])和双层方括号([[ ]])都用于条件测试。它们的功能相似,但双层方括号提供了更多的功能和灵活性。
-
单层方括号(
[]):- 用于条件测试,例如判断文件是否存在、判断字符串是否等于某个值等。
- 不支持正则表达式匹配,只能进行简单的字符串匹配。
- 不支持逻辑操作符,如
-a(与)、-o(或)和!(非)。
-
双层方括号(
[[ ]]):- 与单层方括号类似,用于条件测试。
- 支持正则表达式匹配,可以使用
=~操作符进行匹配。 - 支持逻辑操作符,如
-a(与)、-o(或)和!(非)。 - 提供更好的错误处理和防止字符串拆分和文件名扩展的特性。
下面是一些示例,展示了单层方括号和双层方括号的用法:
使用单层方括号:
if [ -f "file.txt" ]; thenecho "File exists."
fiif [ "hello" == "world" ]; thenecho "Strings are equal."
fi
使用双层方括号:
if [[ -f "file.txt" ]]; thenecho "File exists."
fiif [[ "hello" == "world" ]]; thenecho "Strings are equal."
fi
可以看到,双层方括号提供了更多的功能和灵活性,因此在编写复杂的条件语句时,建议使用双层方括号。