Linux非Bash环境下执行awk去重命令报错求助
问题原因及解决办法
报错原因
你遇到的a[: Event not found错误,根源在于当前使用的非Bash Shell(比如csh、tcsh)对单引号内的!字符的解析规则和Bash不同:
- Bash中,单引号会完全包裹内容,禁止所有特殊字符的Shell解析;
- 但csh/tcsh这类Shell里,单引号无法屏蔽
!的历史命令扩展功能,Shell会尝试把!解析为历史命令引用,导致awk代码被错误拆分,最终触发报错。
解决办法
可以用以下几种方式规避这个问题:
- 转义
$并改用双引号:让Shell不解析$0,同时避免!被历史扩展干扰awk "!a[\$0]++" file.tcl - 转义
!字符:直接告诉Shell不要处理这个!awk '\!a[$0]++' file.tcl - 临时关闭历史扩展(以tcsh为例):执行命令前禁用历史扩展,完成后恢复
set noglob awk '!a[$0]++' file.tcl unset noglob
内容的提问来源于stack exchange,提问作者PARTH KHAMAR
相关产品推荐
相关产品推荐

