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