때때로 사용자에게 확인을 요청하는 bash 스크립트가 있습니다. 단일 문자를 읽은 다음 이를 소문자로 변환하고 "y"인지 확인하여 이 작업을 수행합니다. 그렇지 않은 경우 스크립트가 종료됩니다.
이제 읽기 입력에서 Enter 키를 누르면 error: unary operator expected
이 문제를 방지하거나 오류를 잡을 수 있습니까?
코드 세그먼트:
echo -ne "Confirm [y/n]: "
read -n1 uc
if [ ${uc,,} != "y" ]
then
exit 0
fi
답변1
다음 명령문은 정상적으로 작동합니다.
if [ "${uc,,}" != "y" ]
설명: uc
비어 있으면 테스트는 다음과 같이 셸에 의해 확장됩니다.
if [ != "y" ]
그리고 따옴표가 있는 것은
if [ "" != "y" ]
경험 법칙:언제나문자열이 포함된 쉘 변수를 확장할 때 따옴표를 사용하십시오. 공백이 포함되어 있거나 비어 있을 수 있으며, 따옴표가 없으면 전달된 명령이 혼동되는 경우가 많습니다(인수가 너무 많거나 인수가 누락됨).