로 변수 인용의 효과를 항상 표시 할 수 있습니다 printf
.
단어 분할 완료 var1
:
$ var1="hello world"
$ printf '[%s]\n' $var1
[hello]
[world]
var1
인용 된 단어가 없으므로
$ printf '[%s]\n' "$var1"
[hello world]
var1
내부 $()
에서 단어 분할 echo "hello" "world"
:
$ var2=$(echo $var1)
$ printf '[%s]\n' "$var2"
[hello world]
에 단어를 나누지 var1
않고 따옴표를 쓰지 않아도 문제가 없습니다 $()
.
$ var2=$(echo "$var1")
$ printf '[%s]\n' "$var2"
[hello world]
var1
다시 나누는 단어 :
$ var2="$(echo $var1)"
$ printf '[%s]\n' "$var2"
[hello world]
두 가지를 인용하면 가장 쉬운 방법입니다.
$ var2="$(echo "$var1")"
$ printf '[%s]\n' "$var2"
[hello world]
글 로빙 문제
변수를 인용하지 않으면 내용이 크게 확장 될 수 있습니다.
$ mkdir test; cd test; touch file1 file2
$ var="*"
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
변수가 확장 된 후에 만 발생합니다. 할당하는 동안 glob를 인용 할 필요는 없습니다.
$ var=*
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
set -f
이 동작을 비활성화 하려면 사용하십시오 .
$ set -f
$ var=*
$ printf '[%s]\n' $var
[*]
그리고 set +f
그것을 다시 활성화 :
$ set +f
$ printf '[%s]\n' $var
[file1]
[file2]