다른 문자열/정수를 비교할 때 작은따옴표를 사용하는 것이 잘못된 것인가요?
저는 스크립트에서 작은따옴표와 큰따옴표를 모두 사용했고 대부분의 경우 작동하지만 스크립트의 일관성을 유지하려면 규칙이 있어야 합니다.
그러면 어느 부분에 어떤 문장을 사용해야 하며, 그 이유는 무엇입니까?
답변1
비교 시 작은따옴표를 사용할지 큰따옴표를 사용할지 선택할 때 주의할 사항은 다음과 같습니다.
확장 프로그램이 작동해야 합니까?
작은따옴표는 기본적으로 문자열의 리터럴 값을 원한다는 의미입니다. 따라서 일반적으로 변수를 비교하려고 하기 때문에 비교하려는 대부분의 경우에는 실제로 유용하지 않습니다. "$variable1"과 "$variable2"를 비교합니다.매번 잘못된 결과가 나오네요, 변수 값이 아닌 리터럴 문자열을 비교하게 되기 때문입니다.
큰따옴표는 여전히 일부 확장을 허용합니다( man bash
자세한 내용은 페이지의 인용문 섹션을 참조하세요). 위의 예에서는 "$variable1"과 "$variable2"를 실제로 변수에 포함된 값으로 확장한 후 비교합니다.
빈 문자열을 조심하세요!
를 사용하여 test
문자열 값을 비교할 때 빈 문자열을 큰따옴표로 묶지 않고 확장하면 다음과 같은 결과가 발생할 수 있다는 점에 유의하세요.문법 오류. 예를 들어 다음 코드를 실행하면 오류가 없다고 생각할 수 있습니다.
str="STRING"
if [ $str = "STRING" ]; then
echo "EQUAL"
fi
그러나 어느 시점에 빈 문자열이 있으면 bash는 단항 연산자가 필요하다고 불평합니다. 이는 코드가 다음으로 확장되기 때문입니다.
str=""
if [ = "STRING" ]; then
echo "EQUAL"
fi
그리고 =
뒤에 매개변수가 하나만 있지만 단항 연산자는 아닙니다. 이를 방지하려면 다음과 같이 비교 시 변수 이름을 큰따옴표로 묶으십시오.
str="STRING"
if [ "$str" = "STRING" ]; then
echo "EQUAL"
fi
따옴표를 선택할 때 명심해야 할 다른 사항이 있습니다(예: 특정 특수 문자를 이스케이프 처리하는 등).$, `, \ 및 ! 기록 확장이 활성화된 경우- 큰따옴표 사용). 그러나 기본적으로 리터럴 문자열을 원할 경우 작은따옴표를 사용하세요. 작동하기 위해 확장이 필요한 경우 큰따옴표를 사용하십시오. 필요한 경우 이를 혼합할 수도 있습니다(이렇게 하면 일부 탈출이 방지됩니다).
hello='Hello World'
mystring="$hello"'!'
echo "$mystring"