!
명령 줄 기록의 맥락에서 명령 줄에 특별한 의미가 있음을 알고 있지만 실행 스크립트에서 느낌표가 때때로 구문 분석 오류를 일으킬 수 있습니다. 이벤트
와 관련이 있다고 생각 event
하지만 이벤트 가 무엇인지 또는 무엇을 하는지 모르겠습니다 . 그럼에도 불구하고 같은 명령이 상황에 따라 다르게 작동 할 수 있습니다.
아래의 마지막 예는 오류를 발생시킵니다. 그러나 왜 같은 코드가 명령 대체 외부에서 작동했을 때? .. GNU bash 4.1.5 사용
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/!p')"; echo "$var"
# bash: !p': event not found
protected
. 더 적합했을 것입니다. ( '작은 따옴표'로 보호)
var=$(…)
(큰 따옴표 는 사용할 수 없음) 예상대로 작동합니다. 간단한 할당의 값 부분은 단어 분할의 대상이나 (이 예 (내장 명령을 통해 수행 과제의 진실하지 않을 수 있지만 글 로빙 아니기 때문에 여전히 "안전"입니다 export
, local
모든 쉘에서) 등). 불행하게도, 큰 따옴표는 다른 문맥에서 다른 유형의 확장을 계속하면서 단어 분리 및 글 로빙으로부터 보호하는 방법이므로 간단한 할당을 넘어 확장되지 않습니다.