请遵循以下示例(请注意字符串为null)
获得误差
[root@linux /tmp]# STRING=
[root@linux /tmp]# [ $STRING = dog ] && echo "yes its a dog"
bash: [: =: unary operator expected语法无错误
[root@linux /tmp]# STRING=
[root@linux /tmp]# [[ $STRING = dog ]] && echo "yes its a dog"
[root@linux /tmp]# [[ $STRING != dog ]] && echo "yes its a dog"
yes its a dog为什么当我使用单个方括号时,我会得到-一元操作符期望的?
但是在双方括号的情况下,语法给出了很好的结果
发布于 2014-06-02 06:02:51
与[[ ]]不同的是,与普通命令一样,单个方括号受分词的影响。将它类似地看作是将参数传递给test内置。[[ ]]是特殊的,它中的变量不与IFS分离。这就是为什么最好使用[[ ]],因为它更高效、更安全。
这只是你不能用[做的事情之一。有了[,你就会和{ }和( )一起玩,让它正常工作。请注意,( )调用一个子subshell,而{ }最终总是需要一个分号,这是很难看的。但是,您可以使用[[ ]]安全地完成该任务。
[[ a != b && c != d && ( something || something ) ]]顺便说一下,要解决问题,您必须将变量放在双引号中,以防止拆分:
[ "$STRING" = dog ]对于[[,它是不需要的。
Sere分词:节点/Word-Splitting.html
Add:
看起来,$STRING实际上被跳过了,因为它是空的,而不是拆分的。同样,将其解释为正常命令的概念也将适用,而应用双引号将修复它。
发布于 2014-06-02 06:01:34
因为[[很特别。[需要保持伯恩壳兼容性,包括其局限性。因为[[是在bash中单独引入的一个构造,所以它可以被修正。
发布于 2014-06-02 06:02:00
这是很难搜索,但这是非常常见的问题。尝试在googling中搜索"bash方括号“,您将看到关于这个主题的大量讨论,主要讨论如下:
https://www.google.com/search?q=bash+square+brackets
.5B.5B.29
简单的回答是总是使用[除非你知道.
https://stackoverflow.com/questions/23988059
复制相似问题