awk '{print tolower($0)}'
은 셸이 확장되지 않도록합니다. $0
. awk는 $0
을 보게됩니다.
awk "{print tolower($0)}"
는 쉘이 현재 스크립트 나 쉘, 대화 형 세션에서 -bash
같은 이름으로 $0
을 확장합니다. awk는
print tolower(-bash)
을 볼 수 도착하고 bash
라는 어떤 변수에 대해 알고하지 않기 때문에, 그것은
somecmd "${ROLE_NAME}" | someothercmd
과의 출력을 0
$(somecmd "${ROLE_NAME}" | someothercmd)
에 초기화 반환 출력은 단어 분리와 glob 확장을 겪습니다.
"$(somecmd "${ROLE_NAME}" | someothercmd)"
도 동일하지만 단어 분할 및 glob 확장이 발생하지 않습니다. 그러나
명령 교체는 기본적으로 억제 로빙 워드 분할, 할당의 우측에있는 경우 :
var=$(somecmd "${ROLE_NAME}" | someothercmd)
var="$(somecmd "${ROLE_NAME}" | someothercmd)"
그것을 동등 그래도 상처를주지 않는다.
"suppress by default"문은 전체적으로 오른쪽에만 적용됩니다. 내에서 이내에, 당신은 여전히 견적을해야합니다. 배열을 다룰 때 중요하다 : 단지 확장 적용
$ myfunc() { echo 1 2 3; } # Generates three words
$ arr=($(myfunc)) # Unquoted within()
$ declare -p arr
declare -a arr='([0]="1" [1]="2" [2]="3")' # Three array elements
$ arr=("$(myfunc)") # Quoted within()
$ declare -p arr
declare -a arr='([0]="1 2 3")' # One array element
을 관찰 그리고 마지막으로, "자동으로 오른쪽에 인용 된, 즉, var=$1
(따옴표가 필요 없음) 또는 var=$(command)
($()
주위에 필요한 따옴표; 어쩌면 command
내에서 필요할 수 있습니다. 아니요 오른쪽에 공백이있는 경우 적용 : var=a b c
아니요a b c
을 var에 할당하십시오.환경 변수 var
을 값 a
으로 설정 한 다음 c
인수로 b
명령을 실행합니다.
두 번째 예에서는 실제 사용으로 인해 다른 동작이 발생합니다. 나는 '--role $ (aws iam get-role --role)'형식의 [논쟁] (http://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html)을 가지고있다. -name "$ {ROLE_NAME}"| jq -raw-output '.Role.Arn')'잘 작동하지만'--role "$ (aws iam get-role --role-name"$ {ROLE_NAME} " | jq --raw-output '.Role.Arn') ""모든 종류의 오류를 생성합니다. – orome
@raxacoricofallapatorius 그것은'jq'의 입력과'--role'이 기대하는 옵션의 종류에 달려 있습니다. –
그러나 두 경우 모두 바깥 쪽 따옴표 안의 모든 내용을 처리하지는 않습니까? 바깥 쪽 따옴표를 추가하면 전체 프로세스의 맨 마지막 부분에서 분할과 glob 확장을 방지 할 수 있습니다. 이 경우 관련된 값은 동일합니다 (특수 문자의 공백 없음). – orome