해야 할 일

해야 할 일

!예를 들어 필드 구분 기호로 사용하면 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'!'

관련 정보