왜 변수를 작은따옴표로 묶을 수 없나요? [복사]

왜 변수를 작은따옴표로 묶을 수 없나요? [복사]

따라서 이 코드는 제대로 작동합니다. "$i"는 큰따옴표로 묶여 있습니다.

for ((i=0; i <= 10; i++)); do
    printf '%d\n' "$i"
    done

그러나 "$i"를 작은따옴표('$i')로 묶으면 10번만 반복됩니다.

bash: printf: $i: invalid number
0

왜? 이 질문에는 버그 보고서가 포함되어 있으며 모든 사람이 말하는 것처럼 철학적이지는 않습니다. 이것이 "나쁜 문제"라고 결정하기 전에는 인터넷의 모든 내용을 읽을 수 없습니다.

답변1

문자열을 작은따옴표로 묶으면 쉘은 문자열에서 변수 확장을 수행하지 않습니다. 리터럴 문자열을 얻습니다. printf 명령의 경우 값이 $i유효한 십진수가 아니므로 printf에서 오류가 발생합니다.

문자열을 큰따옴표로 묶으면 쉘은 변수 확장을 수행합니다. 이 경우 변수의 정수 값을 반환 i하고 printf는 이에 만족합니다.

관련 정보