15

bash文字列の比較結果を変数に格納したいのですが、その効果は次のとおりです。

if [[ $a == $b ]]; then
    res=1
else
    res=0
fi

私は次のようなもっと簡潔なものを書くことができることを望んでいました:

res2=$('$a'=='$b') #Not valid bash

if構文を延期せずに、私が望むことを達成する方法はありますか?

4

3 に答える 3

20

次のいずれかをお勧めします。

res=0; [ "$a" == "$b" ] && res=1

また

res=1; [ "$a" == "$b" ] || res=0

あなたが望んでいたほど単純ではありませんが、if ... else ... fi.

于 2012-11-09T16:45:32.447 に答える
4

$?前のコマンドからの戻り値を含む変数を使用することもできます。

res="$( [[ $a == $b ]]; echo $? )"

それはあなたが与えた数字を逆にするでしょうが。最終結果は次のようになります。

if [[ $a == $b ]]; then
  res=0
else
  res=1
fi

これは、シェルが の戻り値を0true および1false として解釈するためです。

私もこの解決策を完全に支持していると言っているわけではありません。それはハックで、少し不明確です。しかし、それは簡潔であり、あなたが求めたのは簡潔です。

于 2012-11-09T16:55:27.793 に答える