You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux管道中如何在命令的不同位置插入参数?

Linux管道中如何在命令的不同位置插入参数?

嘿,我太懂你遇到的这个坑了!你想把文件里的两个数值(比如1和2)分别传给cal命令的-A和-B选项,结果用xargs -I的时候,它居然跑了两次cal,完全不是你想要的“一次命令带两个参数”的效果对吧?

先给你拆解下为啥-I不行:xargs -I的逻辑是逐行处理输入,每一行都会替换掉你指定的占位符(比如{}),然后执行一次命令。比如你要是这么写:

cat file-with-content.txt | xargs -I {} cal -A {} -B {}

那文件里第一行的1会变成cal -A 1 -B 1,第二行的2会变成cal -A 2 -B 2,自然就执行两次了,根本达不到把两个值分别放到-A和-B的目的。

那正确的做法该咋弄?我们需要让xargs一次性把所有输入的参数收过来,然后精准分配到cal的两个选项位置上,用sh -c来包裹命令就可以实现:

假设你的file-with-content.txt内容是:

1
2

用这个命令就能搞定:

cat file-with-content.txt | xargs sh -c 'cal -A "$1" -B "$2"' --

给你解释下这个命令的逻辑:

  • xargs会把文件里的两行内容(也就是1和2)作为整体参数传给后面的sh -c脚本
  • --是用来占位脚本的$0(这个参数一般是脚本名,我们不需要实际内容,用它占位就行)
  • $1和$2就分别对应了xargs传过来的第一个和第二个参数,也就是文件里的1和2,这样就能精准把值放到-A和-B的位置上,而且只会执行一次cal命令

这样是不是就解决了你头疼的问题?

备注:内容来源于stack exchange,提问作者Pola8976

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:12:31