![쉘 스크립트에서 변수에 큰따옴표를 언제 사용해야 합니까? [복사]](https://linux55.com/image/32667/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%B3%80%EC%88%98%EC%97%90%20%ED%81%B0%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EC%96%B8%EC%A0%9C%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
변수를 인용하는 큰따옴표의 의미가 혼란스럽습니다. 예를 들어 다음 두 스크립트는 동일한 출력을 제공합니다. 큰따옴표는 실제로 무엇을 의미합니까?
스크립트 1
getent passwd | while IFS=: read a b c d e f ; do
echo login "$a" is "$d"
done
스크립트 2
#! /bin/sh
getent passwd | while IFS=: read a b c d e f ; do
echo login $a is $d
done
답변1
보세요고급 Bash 스크립팅 가이드, 특히 일부5.1 참조변수 다루기. 변수를 큰따옴표로 묶는 이유는 변수 내용에 공백이 포함될 수 있기 때문입니다. 공백은 일반적으로 경계 문자이며 대부분의 명령에서 텍스트 문자열의 원자 구분을 나타냅니다.
이를 보여주는 좋은 예가 있습니다.
위 링크에서 발췌
variable2="" # Empty.
COMMAND $variable2 $variable2 $variable2
# Executes COMMAND with no arguments.
COMMAND "$variable2" "$variable2" "$variable2"
# Executes COMMAND with 3 empty arguments.
COMMAND "$variable2 $variable2 $variable2"
# Executes COMMAND with 1 argument (2 spaces).
# Thanks, Stéphane Chazelas.
위에서는 변수가 참조되는 방식에 따라 매개변수가 없거나 3 또는 1이 될 수 있음을 알 수 있습니다.
노트:ABS 가이드에 피드백을 제공하여 자신이 속한 사이트로 돌아갈 수 있도록 해주신 @StéphaneChazelas에게 감사드립니다.