bash - 在 Bash 中,双方括号 [[ ]] 是否优于单方括号 [ ]?

标签 bash if-statement syntax

一位同事最近在一次代码审查中声称,[[ ]] 构造比 [ ] 更受青睐,例如

if [ "`id -nu`" = "$someuser" ] ; then
     echo "I love you madly, $someuser"
fi

他无法提供理由。有吗?

最佳答案

[[ 的惊喜更少,通常使用起来更安全。但它不是可移植的——POSIX 没有指定它的作用,只有一些 shell 支持它(除了 bash,我听说 ksh 也支持它)。例如,你可以这样做

[[ -e $b ]]

测试文件是否存在。但是对于 [,您必须引用 $b,因为它会拆分参数并扩展诸如 "a*" 之类的内容(其中 [[ 按字面理解)。这也与 [ 可以作为外部程序并像其他程序一样正常接收其参数的方式有关(尽管它也可以是内置程序,但它仍然没有这种特殊处理)。

[[ 还有一些其他不错的功能,例如与 =~ 匹配的正则表达式以及类似 C 语言的运算符。这是一个很好的页面:What is the difference between test, [ and [[ ?Bash Tests

关于bash - 在 Bash 中,双方括号 [[ ]] 是否优于单方括号 [ ]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669452/

相关文章:

java - 如何将两个 If 语句写入一行(三元运算符)?

javascript - 简化 javascript if 语句,其中条件相同,但变量除外

java - 线程 run() 中的条件检查失败

javascript - 在函数内部返回 true 或 false,我有点困惑

linux - 使用 bash 检查 node.js 应用程序是否已正确启动

python - 从子进程python多线程调用中以提升的权限运行bash脚本

bash bc 无法比较数字

linux - 以另一个用户身份执行命令并获取该进程的 PID

java - 类型转换为 Dalvik 格式失败 : Unable to execute dex: java. nio.BufferOverflowException

syntax - dart mixin 'with' 不能在没有 'extends' 的情况下使用?