3
./build_binaries.sh: line 43: [: ==: unary operator expected

我的这行 ( line 43) 对我bash script来说看起来是正确的,但它一直在抛出错误。

if [ ${platform} == "macosx" ]; then

错误:

./foo.sh: line 43: [: ==: unary operator expected

这是在 OSX 上。

4

2 回答 2

5

问题是这$platform是一个空字符串。通常的解决方法是将其放在引号中:

if [ "${platform}" == "macosx" ]

例子:

$ unset x
$ [ $x == 3 ]
-bash: [: ==: unary operator expected
$ [ "$x" == "3" ]
$
于 2013-02-17T02:48:40.407 回答
3

一种可能性是使用单个=. 这就是经典的记号。一些 shell 允许==,但其他 shell 不允许。

另外,你应该${platform}用双引号括起来;我认为这是一个空字符串,这是令人困惑的事情。

platform=
if [  $platform  == mac ]; then echo hi; else echo lo; fi
if [ "$platform" == mac ]; then echo hi; else echo lo; fi

这会产生您在第二行看到的错误。

于 2013-02-17T02:48:18.807 回答