空白的扩展测试`[[]]`不起作用

时间:2018-08-19 10:48:53

标签: bash boolean-expression

例如,我可以在test和算术扩展((...))中使用空格来表示NULL

$ test ; echo $?
1
$ (( )); echo $?
1

但是使用扩展的测试命令,我得到了一个错误,

$ [[ ]]; echo $?
bash: syntax error near `;'

好的,我可以使用''""来解决此错误,但是我的问题是

  1. 无论如何我可以使用空白测试[[ ]]而不会出错吗?
  2. 如果来自1.的答案为“否”,那么我想知道[[ ]][ ](( ))表现不同的原因吗?

1 个答案:

答案 0 :(得分:1)

关于您的第一个问题,当我阅读[[ ]]的手册页时为什么只有BASH不起作用,我看到以下内容:

  

[[…]] [[expression]]返回状态0或1,具体取决于   条件表达式的评估。表达式是   由Bash条件中所述的主要元素组成   表达式。不执行分词和文件名扩展   [[和]]之间的单词;波浪号扩展,参数和   变量扩展,算术扩展,命令替换,   进行流程替换和报价删除。有条件的   必须将“ -f”之类的运算符不加引号,以将其识别为主要元素。

这意味着它不应该为空。

对于您的第二个问题,[[[之间的区别是[[[的增强,这是非常有用的SO链接,我发现您也可以通过它。 / p>

What's the difference between [ and [[ in Bash?

编辑: 为了检查上一条命令的状态,我创建了一个简单的检查,也可以以此为起点:

if [[ $? -eq 0 ]]
then
  echo "Last command ran successfully."
else
  echo "Last command status is NOT 0 so could be it did not run properly."
fi

EDIT2: :也根据OP的注释问题为((添加示例。 使用((的示例。

cat script.ksh
echo "Please enter a value:"
read value
if ! ((value % 4)); then
    echo "$value is fully divided from 4."
fi

((来自man BASH

  

((表达式))                 根据以下“算术评估”下描述的规则评估表达式。如果值   表达式不是                 零,返回状态为0;否则返回状态为1。这完全等同于让“表达式”。