linux – 使用xargs –max-args –replace与默认分隔符的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 使用xargs –max-args –replace与默认分隔符的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1710字,纯文字阅读大概需要3分钟。
内容图文
![linux – 使用xargs –max-args –replace与默认分隔符的问题](/upload/InfoBanner/zyjiaocheng/958/9d1dd3408e1341f28d02819969ce8bee.jpg)
这按预期工作:
$echo a b c | xargs --replace="{}" echo x "{}" y
x a b c y
这也是:
$echo a b c | xargs --max-args=1 echo x
x a
x b
x c
但这不能按预期工作:
$echo a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a b c y
这也不是:
$echo a b c | xargs --delimiter=' ' --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c
y
我期待这个输出:
x a y
x b y
x c y
作为一种解决方法,我使用的是printf和两个xargs,但这很难看:
$echo a b c | xargs printf '%s\0' | > xargs --null --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c y
知道为什么会这样吗?
解决方法:
根据the POSIX documentation,xargs应该使用由空格或换行符分隔的参数运行给定的实用程序,这就是你的两个第一个例子中发生的情况.
但是,当使用–replace(或-I)时,只有换行符才会分隔参数.解决方法是在单独的行上给出xargs参数:
$printf '%s\n' a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c y
使用POSIX选项:
printf '%s\n' a b c | xargs -n 1 -I "{}" echo x "{}" y
在这里,我给xargs不是一行而是三行.它需要一行(最多)并执行该实用程序作为参数.
另请注意,上面的-n 1(或–max-args = 1)不需要,因为它是-I所做的替换次数,它决定了所用参数的数量:
$printf '%s\n' a b c | xargs -I "{}" echo x "{}" y
x a y
x b y
x c y
事实上,关于xargs的POSIX规范的基本原理部分(我的重点)
The
-I
,-L
, and-n
options are mutually-exclusive. Some implementations use the last one specified if more than one is given on a command line; other implementations treat combinations of the options in different ways.
在测试时,我注意到如果-n和-I一起使用,OpenBSD的xargs版本将执行以下操作:
$echo a b c | xargs -n 1 -I "{}" echo x "{}" y
x a y
x b y
x c y
这与GNU coreutils的xargs(产生x a b c y)不同.这是因为实现接受空格作为带-n的参数分隔符,即使使用-I也是如此.所以,不要一起使用-I和-n(无论如何都不需要).
内容总结
以上是互联网集市为您收集整理的linux – 使用xargs –max-args –replace与默认分隔符的问题全部内容,希望文章能够帮你解决linux – 使用xargs –max-args –replace与默认分隔符的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。