2017-01-04 16 views
1

나는 항상 내가처럼, bash는 $() 따옴표를 삽입해야합니다 생각 :

FOO="$(echo "bar baz")" 

하지만 분명히이 필요, 적어도 입니다 변수 할당시 :

$ FOO=$(echo "foo  bar") 
$ echo "$FOO" 
foo  bar 

한편 변수에 여러 단어를 지정하려고하면 "후속 명령 기간 동안 변수 설정"으로 해석되기 때문에 오류가 발생합니다.

난 그냥 비 할당 상황에 따옴표 없이 $()를 사용하는 경우
$ FOO=bar  fooooo 
fooooo: command not found 

또한, 그들은 다시 것 별도의 단어로 취급 :

$ echo $(echo "baa beee") 
baa beee 

그래서, 은 무엇인가 $() 및 상호 작용에 관한 규칙, 그리고 견적이 아닌 변형이 얼마나 안전합니까? 맨페이지 따옴표 또는 다른 권위있는 참조에 특히 감사드립니다. 또한, 여기에 "좋은 연습/스타일"이 있습니까?

+0

복제물을 연결해 주셔서 감사합니다! 나 혼자서 찾을 수 없었다. – akavel

답변

4

간략히 달리 달리 정상적인 동작을 억제하려면 따옴표가 필요합니다. 대부분의 상황에서 단어 분리 및 경로 이름 확장을 억제하려면 명령 대체를 인용해야합니다. "명령 치환"아래 사람의 페이지에서

는 :

If the [command] substitution appears within double quotes, word 
splitting and pathname expansion are not performed on the results. 

그러나 할당의 오른쪽은 이러한 상황 중 하나가 아닙니다. 매뉴얼 페이지의 "PARAMETERS"에서 :

A variable may be assigned to by a statement of the form 

       name=[value] 

If value is not given, the variable is assigned the null string. All values 
undergo tilde expansion, parameter and variable expansion, command substitution, 
arithmetic expansion, and quote removal (see EXPANSION below). 

단어 분할이나 경로 이름 확장은 언급하지 않습니다.

일반적으로 의심스러운 경우 확장명을 인용하십시오. 번이 단어 분리와 확장의 경로명 확장을 원할 때가 드문 경우가 일반적입니다.

관련 문제