Linux 将-0与xargs一起使用
我正在尝试向NUL分隔的xargs提供一个输入。为此,我提出以下建议:Linux 将-0与xargs一起使用,linux,bash,xargs,Linux,Bash,Xargs,我正在尝试向NUL分隔的xargs提供一个输入。为此,我提出以下建议: $ echo -n abc$'\000'def$'\000' | xargs -0 -L 1 我明白了 我想知道为什么它不把o/p打印为 abc def 您的主要问题是您忘记了-e: $ echo -n abc$'\000'def$'\000' |cat -v abcdef 没有看到零字节。但这是: $ echo -en abc'\000'def'\000' |cat -v abc^@def^@ 更像是这样,^@是c
$ echo -n abc$'\000'def$'\000' | xargs -0 -L 1
我明白了
我想知道为什么它不把o/p打印为
abc
def
您的主要问题是您忘记了
-e
:
$ echo -n abc$'\000'def$'\000' |cat -v
abcdef
没有看到零字节。但这是:
$ echo -en abc'\000'def'\000' |cat -v
abc^@def^@
更像是这样,^@
是cat-v
显示零字节的方式。现在,对于xargs
:
$ echo -en abc'\000'def'\000' | xargs -0 -L 1
abc
def
尝试从bash提示符中返回帮助。您的主要问题是忘记了
-e
:
$ echo -n abc$'\000'def$'\000' |cat -v
abcdef
没有看到零字节。但这是:
$ echo -en abc'\000'def'\000' |cat -v
abc^@def^@
更像是这样,^@
是cat-v
显示零字节的方式。现在,对于xargs
:
$ echo -en abc'\000'def'\000' | xargs -0 -L 1
abc
def
尝试从bash提示符中回显帮助。尝试将输入视为单引号字符串
echo -ne "abc\0def\0" | xargs -0 -L 1
尝试将输入视为单引号字符串
echo -ne "abc\0def\0" | xargs -0 -L 1
谢谢,完美的答案,是的,我忘了-e!不太可能:您希望$'\000'在参数列表中生成一个文本NUL字符,以
echo
,但它没有这样做。由于参数列表是如何在进程(以零结尾的C字符串数组)之间进行通信的,很遗憾,无法在参数中包含文本NUL。od-C
是查看控件的更好方法chars@tripleee:不知道这是什么意思echo
将解释反斜杠八进制代码(当给出-e
时),并将其发送到标准输出,没有人试图将零字节放入argv
@abc:确切地说,您必须使用一个实用程序,它允许您以某种方式象征性地表示它们;当然,echo-e
允许您这样做,但是您最初使用echo-n
的尝试非常好,失败的原因我称之为相当深奥的原因。谢谢,完美的答案,是的,我忘记了-e!不太可能:您希望$'\000'在参数列表中生成一个文本NUL字符,以echo
,但它没有这样做。由于参数列表是如何在进程(以零结尾的C字符串数组)之间进行通信的,很遗憾,无法在参数中包含文本NUL。od-C
是查看控件的更好方法chars@tripleee:不知道这是什么意思echo
将解释反斜杠八进制代码(当给出-e
时),并将其发送到标准输出,没有人试图将零字节放入argv
@abc:确切地说,您必须使用一个实用程序,它允许您以某种方式象征性地表示它们;当然,echo-e
允许您这样做,但是您最初尝试使用echo-n
非常好,失败的原因我称之为相当深奥的原因。我建议使用printf
命令而不是echo
。它的行为更加一致echo
可以是一个外部命令,/bin/echo
,它在不同的系统中有所不同,或者它是一个内置在多个不同shell中的shell,在不同的系统中具有不同的行为。这对于简单的echo hello world
情况很好,当您的脚本仅用于bash时可能还可以,但是对于任何像您所做的那样复杂的事情,我都会使用printf
。在您的例子中:printf'abc\0def\0'
我刚刚意识到printf
也是一个bash
内置命令和一个外部命令,但差异相对较小。我建议使用printf
命令而不是echo
。它的行为更加一致echo
可以是一个外部命令,/bin/echo
,它在不同的系统中有所不同,或者它是一个内置在多个不同shell中的shell,在不同的系统中具有不同的行为。这对于简单的echo hello world
情况很好,当您的脚本仅用于bash时可能还可以,但是对于任何像您所做的那样复杂的事情,我都会使用printf
。在您的例子中:printf'abc\0def\0'
我刚刚意识到printf
也是一个bash
内置命令以及一个外部命令,但差别相对较小。