> echo "hi"
hi
> VAR='echo "hi"'
> $VAR
"hi"
위 명령의 출력이 다른 이유는 무엇입니까?
작은따옴표에서도 비슷한 일이 발생합니다.
> VAR="echo 'hi'"
> $VAR
> 'hi'
답변1
추가 견적 쌍은 추가 평가 단계에서만 사용됩니다. 예를 들어 힘 eval
:
bash-4.2$ VAR='echo "hi"'
bash-4.2$ $VAR
"hi"
bash-4.2$ eval $VAR
hi
그러나 일반적으로 문자열에 매개변수가 포함된 명령을 넣는 것은 좋은 생각이 아닙니다. 대신 배열을 사용하십시오.
bash-4.2$ VAR=(echo "hi")
bash-4.2$ "${VAR[@]}"
hi
답변2
견적 삭제원래 입력 단어에만 나타납니다.아니요확장된 결과에 관해서. 확장된 변수의 일부인 따옴표는 변경되지 않습니다.
답변3
한발 물러서면 왜 변수 대체가 따옴표를 유지해야 하는지 이해하게 될 것입니다.
Unix/Linux/BSD 셸에서 따옴표의 목적은 여러 문자열로 구문 분석될 문자열 부분을 함께 유지하는 것입니다. 셸은 기본적으로 공백을 토큰 구분 기호로 사용하므로 공백이 있는 문자열(예: "one two three")은 어떤 방식으로든 인용되거나 이스케이프되지 않으면 3개의 문자열로 구문 분석됩니다. "one two three" ", "two" 그리고 "셋".
프로그래머가 특정 변수의 값이 삽입된 문자열을 원하는 경우:
VAR=two
STRING="one $VAR three"
쉘은 따옴표를 제거해서는 안 됩니다. 공백이 포함된 문자열은 3개의 작은 문자열로 구문 분석됩니다.