我正在尝试编写一个bash脚本,它将在Windows和Windows上运行win-bash用于Windows端,因为它不必安装。 但是,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
在Windows上(win-bash),但在Mac上运行得很好(我将假设它是更正确的......因为它实际上是Unix)。
知道我在这里做错了什么?
答案 0 :(得分:2)
尝试单=
而不是双==
:
if [ "$(uname)" = "Darwin" ]; then
它们都表示测试中的字符串相等性检查,但是用于比较的单个等号是POSIX兼容的,而双等号不是 - 它只适用于当前bash / ksh作为可读性的语法糖(对于旧炮弹也会失败。)