쉘 스크립트에서 변수에 큰따옴표를 언제 사용해야 합니까? [복사]

쉘 스크립트에서 변수에 큰따옴표를 언제 사용해야 합니까? [복사]

변수를 인용하는 큰따옴표의 의미가 혼란스럽습니다. 예를 들어 다음 두 스크립트는 동일한 출력을 제공합니다. 큰따옴표는 실제로 무엇을 의미합니까?

스크립트 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에게 감사드립니다.

관련 정보