이 코드는 오류를 생성합니다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 문보다 훨씬 낫습니다.