Bash 中单方括号和双方括号的区别
本教程解释了 Bash 中的单方括号和双方括号及其区别。
Bash 中的单方括号 [ ]
单方括号 [
是 Bash shell 中 test
命令的另一个名称。test
命令是所有 POSIX shell 中的标准实用程序。 ]
是 [
的最后一个参数。
下面的两个脚本表明 [
和 test
命令是相似的。第一个脚本使用单方括号检查变量 $y
中的值是否大于变量 $x
中的值并根据 test
命令中的评估返回的结果打印输出.
在我们的例子中,$y
变量的值大于 $x
变量的值。
#!/bin/bash
x=2
y=3
if [ $y -gt $x ]
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
该脚本在执行时将以下消息打印到标准输出。
3 is greater than 2
该脚本使用 test
命令而不是单个方括号。该脚本检查 $y
变量中的值是否大于 $x
变量中的值。
如果 test
返回 true,脚本执行第一个 echo
命令,如果 test
返回 false,它执行 else
部分中的 echo
命令。
在我们的例子中,$y
变量的值比 $x
变量 2 大 3。脚本将执行第一个 echo
命令。
#!/bin/bash
x=2
y=3
if test $y -gt $x
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
该脚本将以下输出打印到标准输出。
3 is greater than 2
Bash 中的双方括号 [[ ]]
双方括号 [[]]
扩展了从 ksh88
采用的 test
命令;它更加通用。双方括号可用于模式匹配、参数扩展,它们不允许分词。
使用双方括号有助于避免 Bash 脚本中的逻辑错误。在双方括号中,&&
、||
、<
和 >
运算符在 test
命令中给出错误时起作用。
我们在下面的脚本中使用方括号进行算术评估。双方括号测试 $x
变量中的值是否等于 $y
变量中的值。
测试返回 true 并执行脚本中的第一个 echo
命令。
#!/bin/bash
x=10
y=10
if [[ $x -eq $y ]]
then
echo "\$x is equal to \$y"
else
echo "\$x is not equal to \$y"
fi
运行脚本会在标准终端中产生以下输出。
$x is equal to $y
Bash 中单方括号和双方括号的区别
test
命令是标准 POSIX shell 上的内置 Bash 实用程序,而双方括号不是命令。双方括号是 Bash 中的扩展,改编自用作关键字的 ksh88
。
与 test
命令相比,双方括号支持更多功能。与 test
命令不同,它支持模式匹配和参数扩展,并且不允许分词。