シェルスクリプトで「abc」とabcを比較するには?

シェルスクリプトで「abc」とabcを比較するには?

私のコードは、標準のbash文字列「stop」をstopと比較する必要があります。

pi@raspberrypi:~/Voice $ ./test.sh | more
"stop"
stop

私のコード:

#!/bin/bash
command=stop
while :
do
  QUESTION=$(cat stt.txt) #stt,txt has command "stop"
  echo $QUESTION
  echo $command
  if [ "$QUESTION" == "$command" ]; then
    echo "You said "stop"!"
    break
  fi
done

別の "を試してみましたが、command="stop結果は同じです。入力しようとしましたが、command=$('stop')一度だけ動作し、次のように文句を言いました。 ./test.sh: line 2: stop: command not found.

"stop"の代わりにコマンドにstopを設定すると、なぜ突然動作が停止したのかわかりません。

答え1

助けてくれてありがとう。私は別のことを試してみました、これは私にとって効果的でした!

#!/bin/bash
command="\"stop\""
while :
do
  QUESTION=$(cat stt.txt) #stt,txt has command "stop"
  echo $QUESTION
  echo $command
  if [ "$QUESTION" = "$command" ]; then
    echo "You said $command"\!
    break
  fi
done

答え2

#!/bin/bash
command="stop"
while :
do
  QUESTION=$(cat stt.txt) #stt,txt has command "stop"
  echo $QUESTION
  echo $command
  if [ "$QUESTION" == "$command" ]; then
    echo "You said $command"\!
    break
  fi
done

スクリプトに 2 つの変更を適用しました。

  1. 変数のスクリプトに直接入力されたすべての文字列は、引用符で囲む必要があります。それ以外の場合、bashはそれをコマンドとして解釈しようとします。したがって、これは文字列値 "stop" を使用して変数 "command" を宣言する有効な方法ではありません。

    command=stop
    

    これは効果的な方法です。

    command="stop"
    
  2. bashはまたあなたのイベントを解釈しようとします!

    echo "You said $command"\!
    

答え3

grep -q '"stop"' < in > /dev/null && echo hooray

関連情報