Bash 스크립트의 OR 연산자

Bash 스크립트의 OR 연산자

이 코드는 오류를 생성합니다3행: [: `]' 누락. 그러면 왜 이 오류가 발생합니까?

#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y"]
then
   echo "YES"
else
   echo "NO"
fi

미리 감사드립니다.

답변1

"와 ] 사이에 공백을 추가해야 합니다.

$ ./test.sh
Y
YES

$ cat test.sh
#!/bin/bash 
read x
if [ $x == "Y" ] || [ $x == "y" ] 
then
    echo "YES"
else
    echo "NO"
fi

건배.

답변2

여는 괄호는 [실제로 명령입니다(비록 쉘 내장으로도 사용할 수 있지만 이야기는 다릅니다).

$ which [
/usr/bin/[

쉘은 주어진 옵션으로 이 명령을 실행합니다. 귀하의 경우에는 , , 및 4개의 옵션이 있는 통화가 하나 있고 $x, , 및 3개의 옵션이 있는 또 다른 통화가 있습니다 . 이는 쉘이 명령 및 기타 명령에서 옵션을 구분하기 위해 공백을 사용하기 때문입니다. 따옴표(")는 전달되지 않지만 쉘에서 특정 문자의 특별한 의미를 "이스케이프"하는 데 사용됩니다(예: 명령에 공백을 전달해야 하는 경우).==Y]$x==y]

[이 시점에서 쉘은 대괄호(그리고 그 사이의 모든 것)로 완성되었으며 몇 가지 유용한 작업을 수행하는 것은 명령에 달려 있습니다 . 마지막 인수로 [예상하도록 프로그래밍되어 있습니다 (명백한 이유 때문에 as 호출 시 동일한 명령에 다른 이름이 필요하지 않습니다). 공백 누락으로 인해 찾을 수 없으며 불평합니다.]test]][

답변3

이중 중괄호를 사용하고 변수를 ""로 묶어야 합니다.

#!/bin/bash
read x;
if [[ "$x" = "Y" ||  "$x" = "y" ]];  then
   echo "YES"
else
   echo "NO"
fi;

그러나 나는 다음을 사용하는 것을 선호합니다.

echo $x |tr '[A-Z]' '[a-z]'

if 문보다 훨씬 낫습니다.

관련 정보