当使用双方括号和单方括号时
这个问题在这里已经有了答案:
与[[ ]]
不同,单个方括号与普通命令一样受字分割的限制。 把它看作是传递参数来test
内建函数。 [[ ]]
是特殊的,它内部的变量不会被IFS分割。 这就是为什么最好使用[[ ]]
因为它更高效和更安全。
这只是你无法做的事情之一[
。 与[
你会玩{ }
和( )
使其工作。 请注意( )
召唤一个子shell,并且{ }
总是需要一个分号,这很难看。 但是,您可以使用[[ ]]
安全地执行此操作:
[[ a != b && c != d && ( something || something ) ]]
顺便解决你的问题,你必须把变量放在双引号中以防止分裂:
[ "$STRING" = dog ]
随着[[
这不需要。
Sere Word Splitting:https://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html
加:
看起来$STRING
似乎实际上是作为空的参数被跳过而不是被分割。 类似地,它被解释为普通命令的概念将被应用,并且应用双引号将会修复它。
因为[[
是特别的。 [
需要保留Bourne shell兼容性,包括其限制。 由于[[
是一个在bash中单独引入的构造,因此它可以被修复。
搜索很困难,但这经常被问到。 试着用google搜索“bash square brackets”,你会看到很多关于这个主题的讨论,主要是关于SO的:
https://www.google.com/search?q=bash+square+brackets
https://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals#Conditional_Blocks_.28if.2C_test_and_.5B.5B.29
简短的答案是总是使用[[除非你知道否则...
链接地址: http://www.djcxy.com/p/97073.html上一篇: when using Double Square brackets and when single square brackets
下一篇: Output redirection inside/outside square brackets in Bash