2

我正在尝试通过在 Windows 端使用win-bash来编写一个在 Mac 和 Windows 上运行的 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

在 Windows(win-bash)上,但在 Mac 上工作得很好(我将假设它是更正确的......因为它实际上是 Unix)。

知道我在这里做错了什么吗?

4

1 回答 1

2

尝试 single=而不是 double ==

if [ "$(uname)" = "Darwin" ]; then

它们都表示测试中的字符串相等性检查,但是用于比较的单个等号是 POSIX 兼容的,而双等号不是 - 它仅适用于当前的 bash / ksh 作为语法糖以提高可读性(将失败旧壳也是如此)。

于 2012-12-11T17:37:19.173 回答