!
예를 들어 필드 구분 기호로 사용하면 awk -F!
오류 메시지가 표시됩니다 bash: !: event not found
. 왜? 받아들이고 있습니다 awk -F"\!"
. 배시 버전 3.2.25
답변1
!
Bash의 트리거 캐릭터입니다.역사 확장. 활성화된 경우 !foo
명령줄과 같은 내용이 로 시작하는 최신 명령으로 확장됩니다 foo
. 또는 그러한 명령줄이 없으면 쉘은 다음과 같은 오류를 표시합니다.
하지만 단어의 마지막 문자로 아무 작업도 수행하면 안 됩니다. 이것은 실제로 시도한 모든 Bash 버전에서 의도한 대로 작동합니다.
$ echo 'aa!bb' | awk -F! '{print $1}'
aa
최신 버전에서는 !
큰따옴표로 끝나기 전에는 아무 작업도 수행하면 안 되므로 -F"!"
이후 버전에서는 작동하지만 3.2에서는 작동하지 않습니다.
백슬래시나 작은따옴표를 사용하면 이스케이프 처리됩니다. 즉, 확장도 되지 \!foo
않습니다 . '!foo'
물론 set +H
.
큰 따옴표를 사용하면 더 이상합니다. 그 안에서 백슬래시는 기록 확장을 비활성화하지만 백슬래시 자체는 그대로 유지됩니다.
$ printf '%s\n' "\!foo"
\!foo
이 경우 awk -F"\!"
awk 자체가 백슬래시를 제거하기 때문에 작동합니다.
답변2
awk
이런 일을 하고 있는 것이 아닙니다 . 껍질입니다. !
셸의 특수 문자입니다.
해야 할 일
항상 당신의 주장을 인용하십시오. 예를 들어
awk -F'!'