Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在awk system()命令字符串中插入制表符_Shell_Awk - Fatal编程技术网

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
),我很乐意知道。