[]在bash中做什么?

And*_*yuk 8 bash

可能重复:
bash:双括号或单括号,括号,花括号

查看rc.darchlinux 中的cron脚本:

#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions

name=crond
. /etc/conf.d/crond
PID=$(pidof -o %PPID /usr/sbin/crond)

case "$1" in
start)
    stat_busy "Starting $name daemon"
    [[ -z "$PID" ]] && /usr/sbin/crond $CRONDARGS &>/dev/null \
    && { add_daemon $name; stat_done; } \
    || { stat_fail; exit 1; }
    ;;
Run Code Online (Sandbox Code Playgroud)

虽然我可以弄清楚大部分语法,但它的作用是什么:

 [[ -z "$PID" ]]
Run Code Online (Sandbox Code Playgroud)

我看到它也写成:

 [ -z "$PID" ]
Run Code Online (Sandbox Code Playgroud)

在参考文献中我发现它[]在if语句中使用,但我在这里没有看到.任何帮助深表感谢.谢谢!

Mit*_*dir 7

open括号([)是test命令的别名,它执行所有测试并返回0表示true或其他表示false."if"仅对测试命令的返回值作出反应.结束括号告诉test表达式结束的位置.双括号([[)是一个内置的bash,可以替换外部调用来测试.


Col*_*nic 7

单个括号模拟/usr/bin/test,一个旧的Unix实用程序.他们做你要求的,但不是你想要的.双括号是改进,是Bash特有的.

http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS

存在一个名为[(左括号特殊字符)的专用命令.它是test效率的同义词,也是出于效率原因而构建的.此命令将其参数视为比较表达式或文件测试,并返回与比较结果对应的退出状态(0表示true,1表示false).

在版本2.02中,Bash引入了[[...]]扩展测试命令,该命令以对其他语言的程序员更熟悉的方式执行比较.请注意[[是关键字,而不是命令.

在[[和]]之间没有文件名扩展或分词,但有参数扩展和命令替换.

使用[[...]]测试构造,而不是[...]可以防止脚本中的许多逻辑错误.例如,尽管在[]构造中给出了错误,但&&,||,<和>运算符在[[]]测试中工作.

  • 一个很好的解释,虽然ABS充满了错误(我们一直在帮助那些错误地遵循#bash建议的人),这可能会引导人们 - 也许是"有关更多信息,请参阅"链接可以添加到http://mywiki.wooledge.org/BashGuide/TestsAndConditionals? (2认同)