首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gawk系统-命令忽略反斜杠

gawk系统-命令忽略反斜杠
EN

Stack Overflow用户
提问于 2014-10-21 01:53:33
回答 2查看 63关注 0票数 1

考虑一个包含字符串列表的文件,

代码语言:javascript
复制
string1
string2
...
abc\de

当使用gawk的system命令执行shell命令时,在本例中打印字符串时,

代码语言:javascript
复制
cat file | gawk '{system("echo " $0)}'

最后一个字符串将被格式化为abcde。$0表示整个记录,这里只有一个字符串

这是否是gawk的系统命令的限制,无法输出未格式化的gawk变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 02:35:45

在讨论MusséRedi的回答时,注意到反斜杠没有打印出来:

代码语言:javascript
复制
$ echo 'abc\de' | gawk '{system("echo " $0)}'
abcde

但是,在这里,反斜杠将打印:

代码语言:javascript
复制
$ echo 'abc\de' | gawk '{system("echo \"" $0 "\"")}'
abc\de

不同之处在于,后一个命令将$0传递给shell,其中包含双引号。双引号改变了shell处理反斜杠的方式。

确切的行为会从一个壳变成另一个。

要在避免所有外壳变化无常的情况下打印,一个简单的解决方案是:

代码语言:javascript
复制
$ echo 'abc\de' | gawk '{print $0}'
abc\de
票数 1
EN

Stack Overflow用户

发布于 2014-10-21 02:05:13

在Bash中,我们使用双反斜杠来表示实际的反斜杠。一个反斜杠的功能是转义一个字符。因此,系统命令根本不是格式化的;Bash是。

这个问题的解决方案是用awk编写一个函数,将反斜杠预先格式化为双反斜杠,然后将其传递给system命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26477718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档