gpt4 book ai didi

方括号中的 shell 间距

转载 作者:行者123 更新时间:2023-12-04 11:51:25 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why should there be spaces around '[' and ']' in Bash?

(4 个回答)


3年前关闭。




作为初学者,我没有在任何地方找到答案,关于间距(语法)和解析的规则。

例如。

我可不可以做

if [$# -eq 2] ; 
then
llll
fi

或者我必须在对象之间总是有一两个空白,因为
if [ $# -eq 2 ] ;
then
llll
fi

第二个相关问题是关于
if [[ $# -eq 2 ]] ;
then
wafwaf
fi

我担心的是前后间距 [ , ] .

没有搜索为我提供了一套规则。

最佳答案

[后面需要空格之前 ] .

  • [实际上是命令的名称,test 的别名.它不是一个特殊的符号,它只是一个具有不寻常名称的命令。
    $ help '['
    [: [ arg... ]
    Evaluate conditional expression.

    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.
  • 因为是普通命令名而不是特殊字符,所以[后面需要一个空格.如果省略空格并写入 [foo shell 将搜索 $PATH对于名为 [foo 的命令.
    $ [ foo = foo ] && echo true
    true
    $ [foo = foo] && echo true
    [foo: command not found
  • 为便于阅读,[期望它的最后一个参数正好是 ] .作为一个普通的命令行参数,]在它之前必须有一个空格。如果没有空格,则括号将成为前一个参数的最后一个字符,并且 [会提示它的最后一个参数不是 ] .
    $ [ foo = foo]
    bash: [: missing `]'
    $ [ foo = 'foo]'
    bash: [: missing `]'
  • [[是比 [ 具有更多功能的 bash 增强功能,即对未加引号的变量名称进行更明智的处理。它需要两端有一个空格,同 [ .然而 [[实际上是特殊的 shell 语法,并且解析方式不同。这不是“普通命令” [是。

    详细解释 [之间的区别和 [[ , 看:
  • What's the difference between [ and [[ in Bash?
  • 关于方括号中的 shell 间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19032680/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com