在艰难地学习 bash 的过程中,我发现[和test既是命令又是同义词,而且都是内置的。
由于它是一个内置函数builtin [,它不应该给 任何错误,但我得到了-bash: [: missing `]',有人可以在这里向我解释内置函数 的行为吗?提前致谢。
anupam:Markdown$ which [
/usr/bin/[
anupam:Markdown$ echo $?
0
anupam:Markdown$ which test
/usr/bin/test
anupam:Markdown$ echo $?
0
anupam:Markdown$ builtin test
anupam:Markdown$ echo $?
1
anupam:Markdown$ builtin [
-bash: [: missing `]'
anupam:Markdown$ echo $?
2
anupam:Markdown$
Run Code Online (Sandbox Code Playgroud)
Mel*_*ius 10
[命令的版本需要]作为强制的最后一个参数(因此它必须以空格开头)。强制用户关闭括号中的“块”只是一个正式的、语法上的事情,所以命令看起来像这样:
if [ $1 -eq 2 ]; then
Run Code Online (Sandbox Code Playgroud)
代替
if [ $1 -eq 2; then
Run Code Online (Sandbox Code Playgroud)
见help [:
if [ $1 -eq 2 ]; then
Run Code Online (Sandbox Code Playgroud)
该test版本不要求也不接受最终的].
你不需要builtin那里。内置命令优先于外部命令,因此[只会执行内置命令。builtin当您有函数或别名掩码时,该命令更有用[。