1

bash 中的 [ test ] 和 [[ test ]] 有什么区别?什么时候一个比另一个更合适,;最后的作用是什么?

if  [[ -z $DIRECTORY ]];
then
     DIRECTORY=html
fi

if [ ! -d "$DIRECTORY" ]; then
    echo installation directory "'${DIRECTORY}'" does not exist
    exit 1
fi
4

3 回答 3

3

[[是一个与命令类似(但比[命令更强大)的 bash 关键字。请参阅http://mywiki.wooledge.org/BashFAQ/031http://mywiki.wooledge.org/BashGuide/TestsAndConditionals除非您正在编写 POSIX sh,否则我们建议使用[[.

于 2013-01-20T14:15:27.643 回答
0

我们通常在以下情况下使用单方括号:

  • 检查文件内容并希望使用模式(例如星号):if [ -L $file ]; then
  • 检查算术表达式:if [ $a -lt $b ]; then
  • 检查带有字符串的内容,并希望" "像正常一样使用和处理特殊字符(例如星号):if [ -z "$string" ]; then

当我们:

  • 想要使用带字符串的模式(例如星号):if [[ "$string1" == *[sS]tring* ]]; then
  • 文件名中的块模式(例如星号)例如我们搜索名为 *.sh 的文件:if [[ -a *.sh ]]; then
  • 想要使用运算符 && 和 ||:if [[ $a == 3 || $b == 4]]; then
  • 不想插入字符串" "
于 2013-01-20T14:45:45.737 回答
0

[用于外壳,[[用于 bash。

例如:
Try [ $A -eq 1 ]: 如果$A未设置,则会引发错误。
[[ $A -eq 1 ]]将起作用。

于 2013-01-20T14:51:07.647 回答