如何在一行/语句中检查bash中的退出代码?

Uli*_*kel 11 bash

这就是我想要做的:

#!/bin/bash
set -e # I can't remove this line!

if [ docker inspect foo ]; then
  echo container is present
else
  echo container is absent
fi
Run Code Online (Sandbox Code Playgroud)

可能吗?当容器不存在以及何时存在时,docker inspect foo返回退出代码.10

现在我明白了:

-bash: [: too many arguments
Run Code Online (Sandbox Code Playgroud)

Ken*_*ter 12

如果要在"if"语句中运行该命令,则可以这样执行:

if docker inspect foo
then
  echo container is present
else
  echo container is absent
fi
Run Code Online (Sandbox Code Playgroud)

如果需要,可以省略所有换行符或用分号替换.这也有效:

if docker inspect foo; then echo container is present; else echo container is absent; fi
Run Code Online (Sandbox Code Playgroud)

如果你想要更紧凑的东西,你可以使用这种语法:

docker inspect foo && echo container is present
docker inspect foo || echo container is absent
docker inspect foo && echo container is present || echo container is absent
Run Code Online (Sandbox Code Playgroud)

&&如果第一个命令成功,则运行第二个命令.||如果第一个命令失败,则运行第二个命令.最后一行使用两种形式.

  • 警告:`cmd1 && cmd2 || cmd3`习惯用法与if if cmd1不同;然后cmd2; 其他cmd3; fi”,因为如果“ cmd1”或“ cmd2”中的任何一个失败,它将执行“ cmd3”。如果第二个命令是一个“ echo”,这是不可能的(但是可能的);在其他情况下,这可能是一个问题。 (3认同)
  • 如果我只想在特定的退出代码(例如“1”或“2”)上回显容器怎么办? (2认同)