Bash Logic 在一个系统上向后,而不是另一个系统

dfr*_*193 4 bash test

我有两个 linux 系统。我正在测试每个系统上是否存在一个程序。一个系统安装了该程序,另一个系统没有。不知何故,尽管命令在$()每个系统上返回不同的值(如预期的那样,在安装了 nvim 的系统上为 0,在未安装 nvim 的系统上为 1),但每个系统都会以相同的方式评估以下示例。例子:

if [[ $(type nvim &>/dev/null) ]]; then
    echo true;
else
    echo false;
fi
Run Code Online (Sandbox Code Playgroud)

false在两个系统上回响。
为什么会这样,我该如何解决?

Joh*_*024 8

尝试:

if type nvim &>/dev/null
then
     echo true
else
     echo false
fi
Run Code Online (Sandbox Code Playgroud)

一个if command; then...语句依赖于command返回的退出代码。该[[...]]命令可以根据字符串相等、文件是否存在等各种条件设置退出代码。有关man bash详细信息,请参阅。您在此处不需要任何这些条件并type自行返回一个有用的退出代码。

  • 更简洁的版本:`type nvim &>/dev/null && echo true || 回声假`。 (2认同)