쉘 스크립트에서 "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

귀하의 스크립트에 두 가지 변경 사항을 적용했습니다.

  1. 변수에 대한 스크립트에 직접 입력된 모든 문자열은 따옴표로 묶어야 합니다. 그렇지 않으면 bash는 이를 명령으로 해석하려고 시도합니다. 따라서 이는 문자열 값 "stop"을 사용하여 변수 "command"를 선언하는 유효한 방법이 아닙니다.

    command=stop
    

    이것은 효과적인 방법입니다.

    command="stop"
    
  2. bash는 또한 당신의 이벤트를 해석하려고 시도할 것입니다!

    echo "You said $command"\!
    

답변3

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

관련 정보