在Bash脚本中,以下片段有什么区别?Bash脚本if语句
1)使用单括号:
if [ "$1" = VALUE ] ; then
# code
fi
2)使用双括号:
if [[ "$1" = VALUE ]] ; then
# code
fi
在Bash脚本中,以下片段有什么区别?Bash脚本if语句
1)使用单括号:
if [ "$1" = VALUE ] ; then
# code
fi
2)使用双括号:
if [[ "$1" = VALUE ]] ; then
# code
fi
的[[]]构建体的[]中的更通用的击版本。这是从ksh88采用的扩展测试命令。
使用[[]]测试结构,而不是可以防止脚本中的许多逻辑错误。例如,尽管在[]构造中给出了一个错误,但是在[[]]测试中可以使用& &,||,<和>运算符。
More info on the Advanced Bash Scripting Guide。
在您的代码片段中,没有任何区别,因为您没有使用任何附加功能。
使用[[
可抑制括号中表达式的正常词分割和路径名扩展。它还可以启用一些附加操作,如模式匹配
[
是bash内建的,[[
是关键字。请参阅bash FAQ。请注意:互联网上的大多数bash脚本都是废话(不要与带空格的文件名一起工作,引入隐藏的安全漏洞等),而且bash要比人们想象的要难得多。如果你想做bash编程,你至少应该学习bash guide和bash pitfalls。
只是在需要的情况下,便携性:
对于便携性的测试,你可以得到的是Bourne通过传家宝项目壳或:
http://freshmeat.net/projects/bournesh
(在Mac OS X,例如,/ bin中/ sh不是纯Bourne外壳。)
这也是一个外部程序,这并不意味着它不是内建的。
which [
/usr/bin/[
在你必须使用-lt单括号“小于”别名<,而其他人则可以使用<
if [ 3 -lt 4 ] ; then echo yes ; fi
yes
if [ 3 < 4 ] ; then echo yes ; fi
bash: 4: No such file or directory
if [[ 3 < 4 ]] ; then echo yes ; fi
yes
if [[ 3 -lt 4 ]] ; then echo yes ; fi
yes
4:没有这样的文件的手段,它试图从读名为“4”的文件 - 重定向stdin <>和stdout相同。
[提出问题](http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces) – 2010-04-14 22:56:15