무엇을 해야할지

무엇을 해야할지

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

관련 정보