例如,我可以在test
和算术扩展((...))
中使用空格来表示NULL
$ test ; echo $?
1
$ (( )); echo $?
1
但是使用扩展的测试命令,我得到了一个错误,
$ [[ ]]; echo $?
bash: syntax error near `;'
好的,我可以使用''
或""
来解决此错误,但是我的问题是
[[ ]]
而不会出错吗?[[ ]]
与[ ]
和(( ))
表现不同的原因吗?答案 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。这完全等同于让“表达式”。