什么是 /usr/bin/[ 以及如何使用它?

nel*_*aro 30 linux bash coreutils

我正在查看 coreutils 并发现这是作为 coreutils 一部分包含的文件之一: /usr/bin/[. [它是什么以及它有什么作用?

它是一个可执行文件。我只是不知道它有什么作用或如何使用它。

$ file /usr/bin/[  
/usr/bin/[: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared  libs), for GNU/Linux 2.6.15, stripped  
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我认为它默认为 bash 内置的行扩展。而不是实际运行文件。

$ "/usr/bin/["
/usr/bin/[: missing ‘]’
$ /usr/bin/\[
/usr/bin/[: missing ‘]’
Run Code Online (Sandbox Code Playgroud)

Raj*_*ish 36

它相当于命令test. (请参阅info test。)通常您在脚本中的条件表达式中使用它,例如:

if [ -n "$1" ]; then
    echo $1
fi
Run Code Online (Sandbox Code Playgroud)

需要结束括号来包含条件。(好吧,看起来它只是为了在代码中看起来更好。有人知道它的任何其他实际原因吗?)

  • 请注意,`[` 是*两者* 一个shell 内置程序和一个具有相同(或相似)用法的外部程序。在 bash 中,当您运行 `[` 或 `test` 时,您正在调用内置函数。 (4认同)

dog*_*ane 22

它相当于test命令。

代替

if /usr/bin/test -z "$VAR"
then
    echo VAR not set
fi
Run Code Online (Sandbox Code Playgroud)

您可以使用:

if /usr/bin/[ -z "$VAR" ]
then
    echo VAR not set
fi
Run Code Online (Sandbox Code Playgroud)

它也可以在循环中使用:

i=0
while [ $i -lt 10 ]
do
   echo $i
   ((i++))
done
Run Code Online (Sandbox Code Playgroud)

您还可以在这样的单行中使用它们:

[ -z "$VAR" ] && echo VAR not set && exit

[ -f foo.txt ] && cat foo.txt
Run Code Online (Sandbox Code Playgroud)

  • 如何使用它的好例子。“如果/usr/bin/[” (3认同)