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

=double の代わりにsingle を試してください==:

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

どちらもテスト内の文字列の等価性チェックを意味しますが、比較のための単一の等号は POSIX に準拠していますが、二重の等号はそうではありません。現在の bash / ksh では、読みやすさのための構文糖衣として機能します (次の場合は失敗します)。古いシェルも同様です)。

于 2012-12-11T17:37:19.173 に答える