![Bash 逻辑在一个系统上向后,但在另一个系统上则不然](https://linux22.com/image/74429/Bash%20%E9%80%BB%E8%BE%91%E5%9C%A8%E4%B8%80%E4%B8%AA%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%90%91%E5%90%8E%EF%BC%8C%E4%BD%86%E5%9C%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%88%99%E4%B8%8D%E7%84%B6.png)
我有两个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