6

私は以下のシェルスクリプトでテストしています:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

if条件でこのエラーが発生します。

: ==: unknown test operator

==本当に使用する正しい構文ではありませんか?私は以下のようにコマンドラインで実行しています

test_lsn_2 INSTANCE=ALL

誰かが解決策を提案できますか?ありがとう。

4

5 に答える 5

17

文字列を比較するには、double ではなく、1 つの = が必要です。文字列が空の場合は、二重引用符で囲む必要があります。

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi
于 2009-11-02T10:48:48.643 に答える
6

ksh を使用しているようですが、bash をタグとして追加しました。bash 関連の回答を受け入れますか? bash を使用すると、次の方法で実行できます。

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

詳細については、こちらを参照してください。

于 2009-11-02T10:47:00.673 に答える
4

試す

if [ "$instance" = "ALL" ]; then

いくつかの間違いがありました:

  1. 変数が空であるという(ありそうもない)ケースから保護するために、変数を二重引用符で囲む必要があります。この場合、シェルはif [ = "ALL" ]; thenどちらが有効でないかを認識します。

  2. シェルの Equals は単一を使用します=(シェルで an に値を割り当てる方法はありませんif)。

于 2009-11-02T10:54:27.623 に答える
2
totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac
于 2009-11-02T10:39:17.870 に答える
0

私はすでに同様の質問に答えました。基本的に、必要な演算子は=(not ==) であり、変数が空の場合 (つまり、 になるif [ = ALL])、構文が壊れます。詳細については、他の回答をご覧ください。

于 2009-11-02T10:53:07.813 に答える