内置 [ , -bash: [: 缺少 `]'

laz*_*rus 7 command-line bash

在艰难地学习 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当您有函数或别名掩码时,该命令更有用[

  • @jazzz 你不需要那里的`builtin`。内置命令优先于外部命令,因此只需 `[` 将执行内置命令。当你有一个函数或别名屏蔽 `[` 时,`builtin` 命令更有用。 (2认同)
  • @Melebius :O 你不需要这样做!答案本身很好,编辑只是补充信息(无论如何我可以在没有 CW 的情况下进行编辑:P)。另外,zsh 用户自己,所以我添加了一个函数,只是为了我需要引用 `help`:`bh () (bash -c 'for i; do help "$i"; done' bash "$@") ` (2认同)