Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Linux 将-0与xargs一起使用_Linux_Bash_Xargs - Fatal编程技术网

Linux 将-0与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

我正在尝试向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^@
更像是这样,
^@
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
内置命令以及一个外部命令,但差别相对较小。