我正在尝试编写一个可以在Mac和Windows上运行的bash脚本,方法是在Windows端使用win-bash,因为它不必安装。但是,Mac和Windows似乎对语法有不同的看法。
例如,到目前为止,我有以下脚本:
echo "Setup..."
shopt -s expand_aliases #make sure aliases work
if [ "$(uname)" == "Darwin" ]; then
alias p4cli=./bin/p4
else
alias p4cli=p4
fi
echo "Checking login status..."
p4cli groups > .trash
if [ $? -ne 0 ]; then
p4cli login
fi
echo "Done!"
此操作失败,并显示:
[: ==: binary operator expected
在窗口(win-bash)上,但在Mac上运行良好(我将假设这是更正确的一个......因为它实际上是Unix)。
知道我在这里做错了什么吗?
尝试单=
而不是双==
:
if [ "$(uname)" = "Darwin" ]; then
它们都意味着测试中的字符串相等性检查,但用于比较的单个等号符合 POSIX 标准,而双等号则不是 - 它仅适用于当前的 bash/ksh 作为可读性的语法糖(对于较旧的 shell 也会失败)。