質問

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

#!/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

誰かが解決策を提案してください。ありがとう。

役に立ちましたか?

解決

KSHを使用していることがわかりますが、Bashをタグとして追加しましたが、Bash関連の答えを受け入れますか? Bashを使用すると、これらの方法でそれを行うことができます:

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

見る ここ その詳細については。

他のヒント

文字列を比較するには、ダブルではなく、単一=が必要です。文字列が空の場合に備えて、二重引用符で貼る必要があります。

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

試す

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

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

  1. 変数の周りに二重引用符が必要であるため、それが空であるという(ありそうもない)ケースから保護する必要があります。この場合、シェルが表示されます if [ = "ALL" ]; then これは有効ではありません。

  2. シェルの等しいものはシングルを使用します = (に値を割り当てる方法はありません if シェル内)。

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

私はすでに同様の質問に答えました。基本的に必要なオペレーターはです = (いいえ ==)そして、変数が空の場合、構文は壊れます(つまり、 if [ = ALL])。見て 他の答え 詳細については。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top