使用 this post 作为起点,我在 bash 中运行以下内容:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done'
预期输出
1
2
3
4
5
实际输出
2
3
4
5
即缺少第一个预期参数。
我可能是一个工具,但想知道这是为什么。
答案 0 :(得分:2)
您必须像这样将位置 0 处的一些虚拟值传递给 sh
脚本:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done' _
1
2
3
4
5
不将 _
传递给 sh
脚本 1
作为 $0
传递,而 for arg
仅循环从位置 1
开始的位置参数。
答案 1 :(得分:2)
总而言之,您是要按行列出数字还是执行命令? 通常,在 bash 中使用以下命令。
seq 1 5 | xargs -n 1 -I {} echo {}
输出
1
2
3
4
5
答案 2 :(得分:0)
问题在于您的内联 bash 代码。
seq 1 5 | xargs -n echo
产生想要的结果。它也可以简化为 seq 5 | xargs -n echo
,因为 seq
假定范围从 1 开始。