有时候,原来运行得好好的 shell 程序,换个平台就运行不了,例如下面 shell 程序。

#!/bin/sh

if [ $1 == "hello" ]; then
echo "Well done!"
fi

在 Ubuntu 上运行,会出现如下的错误:

[: ==: unexpected operator

这是因为 shell 脚本开头使用 ​​#!/bin/sh​​​,而不是 ​​#!/bin/bash​​​。而 ​​/bin/sh​​​ 使用的是 dash,dash 中默认的判断语句是 ​​=​​​,而不是 bash 使用的 ​​==​​。

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 528 20:16 /bin/sh ->

解决方法是直接使用 ​​=​​​ 符号进行判断,但这样做可能会导致该脚本在其他平台无法正常运行(例如不支持 dash 的嵌入式平台)。为了更好地兼容,可以在 shell 脚本开头使用 ​​#!/bin/bash​​,或者使用下面命令将系统默认的 shell 链接由 dash 改为 bash。

sudo

选择“否”即可。

Shell 判断语句出错 [: ==: unexpected operator_bash


Shell 判断语句出错 [: ==: unexpected operator_正常运行_02