bash - 如何传递 "one"参数并在 "xargs"命令中使用它两次

标签 bash shell echo popen xargs

我尝试使用 xargs 将参数传递给 echo:

[usr@linux scripts]$ echo {0..4} | xargs -n 1 echo
0
1
2
3
4

-n 1 确保 xargs 一次将 1 个参数传递给 echo

然后我想使用这个参数两次,但是结果不是我想要的:

[usr@linux scripts]$ echo {0..4} | xargs -I@ -n 1 echo @,@
0 1 2 3 4,0 1 2 3 4

当我添加 -I@ 时,-n 1 似乎已禁用, 这就是我想要的结果:

0,0
1,1
2,2
3,3
4,4

我怎样才能做到这一点?

--------供给---------------- 我使用了@123推荐的方法,但是还有一个问题:

测试.sh:

#!/bin/bash
a[0]=1
a[1]=2
echo "a[0] and a[1] : "${a[0]}, ${a[1]}
echo -n {0..1} | xargs -I num -d" " echo num,${a[num]},num

这是输出:

[usr@linux scripts]$ sh test.sh 
a[0] and a[1] : 1, 2
0,1,0
1,1,1

你可以看到数组 a 没有返回我想要的值:< 我该如何解决这个问题?

最佳答案

如果你不能改变输入格式,你可以设置分隔符为空格:

$ echo -n {0..4} | xargs -d " " -I@ echo @,@
0,0
1,1
2,2
3,3
4,4

否则,更改输入以用换行符分隔标记:

$ printf "%s\n" {0..4} | xargs -I@ echo @,@
0,0
1,1
2,2
3,3
4,4

这种语法的原因在 man xargs

中有解释
-I replace-str

Replace occurrences of replace-str in the  initial-arguments  with  names  read  from
standard input.  Also, unquoted blanks do not terminate input items; instead the sep‐
arator is the newline character.  Implies -x and -L 1.

因此,如果要分隔字段,则必须手动将分隔符设置为空格。

关于bash - 如何传递 "one"参数并在 "xargs"命令中使用它两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126356/

相关文章:

linux - bash 脚本从 shell 但不是从 cron 作业运行

c - 当输入是通过 shell 时,如何找到 C 中输入的长度?

php - 在 PHP 中帮助输出

bash - 如何使用 gcloud 命令或任何 bash 脚本从所有版本中过滤最新的应用程序引擎版本

bash - 你怎么能强制 bc 遵循比例?

linux - 无法使用 shell 脚本获取进程信息

regex - Grep 特定长度的字符

c - 试图使 udp 服务器回显到 udp 客户端并在屏幕上打印,以及让 udp 客户端接收消息

php - 使用 PHP 和 mySQL 格式化搜索结果

linux - 创建脚本以在 linux 中使用变量运行多个命令