在检查多个语句时,bash中条件的最佳实践是什么?

iam*_*ton 4 bash

鉴于您尝试检查变量是否为空而不是以下代码中的其他值:

if [ ! -z "$foo" ] && [[ ${foo} != "bar" ]]; then
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳实践是什么?我已经看过bash条件语写了几种方式,包括以下内容......

if [[ ! -z "$foo" && ${foo} != "bar" ]]; then
Run Code Online (Sandbox Code Playgroud)

我的理解是有区别的使用单支架和双时,我更关心的是,当把&&||括号或出里面.

tha*_*guy 7

放入&&/ ||放在括号内[[ ]].外面也接受.

放置&&/ ||外部括号[ ].里面不允许.

这是因为&&基于返回值将正常命令绑定在一起的事实,例如

wget file && echo "Success"
Run Code Online (Sandbox Code Playgroud)

[尽管它有趣的名字,是一个常规的命令,并遵守与例如wget或相同的规则echo.

[ foo || bar ]是两个命令,[ foo并且bar ]都不是有效的.

[[ .. ]]另一方面,它不是正常的命令,而是特殊的shell语法.[[ foo || bar ]]是一个命令,并相应地解释.

  • `[`是Bash内置的. (3认同)
  • 是的,但这是一个实施优化. (3认同)
  • @Swiss` [[`是一个关键字,`[`是内置的.请检查`type [[`和`type [`in bash. (3认同)
  • @Swiss` [`/`test`也是一个独立的程序,其中几个`bash`实现为内置命令(以及`kill`,`echo`,`printf`等)以提高效率. (2认同)
  • @thatotherguy不仅是一个实现优化.`builtin [`有更多选项`命令[`(在我的系统上). (2认同)