xargs中的bash printf转义格式(%q)
考虑下面执行的bash命令 有关xargs中的bash printf转义格式(%q),bash,shell,printf,xargs,Bash,Shell,Printf,Xargs,考虑下面执行的bash命令 有关man xargs的参考信息: -t、 --冗长 在执行之前,在标准错误输出上打印命令行 好的,(2)相当于(3),对我来说都有意义。我有几个问题 问题1 为什么xargs使用-t输出错误的命令:执行此命令会产生与实际xargs执行完全不同的结果?缺少什么,什么xargs没有打印 问题2 为什么(1)中的结果与(2)和(3)中的结果不同?是xargs引用了结果输出,还是printf出于某种原因正在这样做 将%q替换为%s和 echo "meeny miny moe
man xargs
的参考信息:
-t、 --冗长
在执行之前,在标准错误输出上打印命令行
好的,(2)相当于(3),对我来说都有意义。我有几个问题
问题1
为什么xargs
使用-t
输出错误的命令:执行此命令会产生与实际xargs
执行完全不同的结果?缺少什么,什么xargs
没有打印
问题2
为什么(1)中的结果与(2)和(3)中的结果不同?是xargs
引用了结果输出,还是printf
出于某种原因正在这样做
将%q
替换为%s
和
echo "meeny miny moe" | xargs -t -I {} printf "%s " "{}"
printf %s meeny miny moe
meeny miny moe
结果是不同的,所以我假设它不是引用输出,是不是引用了输出?如何仅使用printf
而不使用xargs
来获得相同的结果?为什么printf
只有在xargs
中才会这样做?问题1
打印命令时,xargs
忽略引号。它应该写下:
printf "%q " "meeny miny moe"
如果没有引号,您将得到:
printf %q meeny miny moe
(注意两个空格字符)
问题2
printf%q
1)和2)中的输出不同,但都是正确的
区别在于1)您使用的是printf
可执行文件(可能在/usr/bin
中),2)您使用的是shell提供的printf
内置文件
试试看:
$ printf '%q\n' "meeny miny moe"
meeny\ miny\ moe
$ /usr/bin/printf '%q\n' "meeny miny moe"
'meeny miny moe'
$ command printf '%q\n' "meeny miny moe"
meeny\ miny\ moe
sh-c在您的系统上打印“%q”a b c“
输出什么?怎么样bash-c'printf“%q”abc“
?@melpomene都输出a\b\c
。内置printf
与程序printf
相比,没有不同的外壳。
$ printf '%q\n' "meeny miny moe"
meeny\ miny\ moe
$ /usr/bin/printf '%q\n' "meeny miny moe"
'meeny miny moe'
$ command printf '%q\n' "meeny miny moe"
meeny\ miny\ moe