Shell 如何在awk system()命令字符串中插入制表符
我只想问这个题目。我试过:Shell 如何在awk system()命令字符串中插入制表符,shell,awk,Shell,Awk,我只想问这个题目。我试过: awk 'BEGIN {system("echo a\tb")}' awk 'BEGIN {system("echo a b")}' # embedded tab 它们都输出“a[space]b”,而不是“a[tab]b”。两个命令都使用两个参数调用echo,a和b;这两个参数用制表符分隔,但与任何常规shell一样,该命令看不到分隔参数的空格 您必须使用一个参数调用echo:字符串“ab” 两个命令都使用两个参数调用echo,a和b;这两个参数用制表符分隔,
awk 'BEGIN {system("echo a\tb")}'
awk 'BEGIN {system("echo a b")}' # embedded tab
它们都输出“a[space]b”,而不是“a[tab]b”。两个命令都使用两个参数调用
echo
,a
和b
;这两个参数用制表符分隔,但与任何常规shell一样,该命令看不到分隔参数的空格
您必须使用一个参数调用echo
:字符串“ab”
两个命令都使用两个参数调用
echo
,a
和b
;这两个参数用制表符分隔,但与任何常规shell一样,该命令看不到分隔参数的空格
您必须使用一个参数调用echo
:字符串“ab”
您需要对其进行shell报价:
awk 'BEGIN {system("echo \47a\tb\47")}'
您需要对其进行shell报价:
awk 'BEGIN {system("echo \47a\tb\47")}'
@pdg:也可以尝试以下操作:
awk -vs1="\"" 'BEGIN{system("echo " s1 "a\tb" s1)}'
其中s1是awk的变量,我们不需要在系统命令中使用转义序列。在这里,我们将转义s1变量中的字符串(“),然后简单地打印系统中的所有变量(awk函数)。@pdg:也可以尝试以下操作:
awk -vs1="\"" 'BEGIN{system("echo " s1 "a\tb" s1)}'
其中s1是awk的变量,我们不需要在系统命令内使用转义序列。这里我们转义s1变量内的字符串(“),然后简单地打印系统内的所有变量(awk的函数)。I当然尝试使用
echo-e
来启用。。。反斜杠转义:awk'BEGIN{system(“echo-ea\tb”)}
但它没有按计划进行。我不觉得自己像个小妖精吗++我第一次尝试awk'BEGIN{system(“echo'a\tb'”)}
,我知道要让它工作起来,它会非常难看,比如:awk'BEGIN{system(“echo'”'a\tb'”)}
,所以我一开始就避免了引号。@JamesBrown假设您的shell理解echo-e
,你需要避开你的反斜杠,这样它就不会被awk
@xhiene解释,我知道,而是当你在屏幕上看到-eab
时的感觉,感觉像个傻瓜。@JamesBrown这是因为awk
执行/bin/sh
,而不是/bin/bash
。我试图设置SHELL
环境变量,但没有成功。如果您知道如何使用system()
(除了system(bash-c)
)调用bash
而不是sh
),我很乐意知道。我当然尝试了echo-e
来启用。。。反斜杠转义:awk'BEGIN{system(“echo-ea\tb”)}
但它没有按计划进行。我不觉得自己像个小妖精吗++我第一次尝试awk'BEGIN{system(“echo'a\tb'”)}
,我知道要让它工作起来,它会非常难看,比如:awk'BEGIN{system(“echo'”'a\tb'”)}
,所以我一开始就避免了引号。@JamesBrown假设您的shell理解echo-e
,你需要避开你的反斜杠,这样它就不会被awk
@xhiene解释,我知道,而是当你在屏幕上看到-eab
时的感觉,感觉像个傻瓜。@JamesBrown这是因为awk
执行/bin/sh
,而不是/bin/bash
。我试图设置SHELL
环境变量,但没有成功。如果您知道如何使用system()
(除了system(bash-c)
)调用bash
而不是sh
),我很乐意知道。