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 命令不同,它支持模式匹配和参数扩展,并且不允许分词。
