Bash 逻辑在一个系统上向后,但在另一个系统上则不然

Bash 逻辑在一个系统上向后,但在另一个系统上则不然

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

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

false两个系统上都有回声。
为什么会这样,我该如何解决它?

答案1

尝试:

if type nvim &>/dev/null
then
     echo true
else
     echo false
fi

语句if command; then...取决于command返回的退出代码。该[[...]]命令可以根据各种条件(例如字符串相等、文件存在等)设置退出代码。man bash详细信息请参见 。您在这里不需要任何这些条件,并且type会自行返回有用的退出代码。

答案2

你这样做是错的。下列:

if [[ $(type nvim &>/dev/null) ]]; then

等价于:

if [[ "" ]]; then

你可以按照所说的做你想做的事在另一个答案中或者无缘无故地更明确并使用$?

type nvim &>/dev/null

if [[ $? -eq 0 ]]; then
    echo true;
else
    echo false;
fi

相关内容