BASH 根据行数设置多个变量,然后将它们作为命令参数传递



我在命令之后有这个输出:

$some_command
id
274725
275050
275065
277560
277801
277814
277817
277862
277863

我需要忽略第一行并将所有数字设置为变量:

var1=274725
var2=275050
...
...
var9=277863

然后我想使用这些变量作为参数运行命令:

$some_cmd $var 1 $var 2 ...$varN

凭借我非常有限的知识,我知道如何计算变量的数量:

varN1=`some_command | wc -l`
varsN=`expr $varN1 - 1`

但这不是最简单的解决方案,我不知道如何在其中设置变量以及如何构造命令进行循环。也许是这样的?

for i in (1...$varsN)
do
var$i=.... ?

看起来你只是把它们放到变量中,这样你就可以把它们传递给另一个函数/程序。这实际上没有必要。

xargs ,在输入参数组上运行多个子任务的程序,可以选择限制它传递给每个任务的参数数量:

pax> echo 'id
274725
275050
275065
277560
277801
277814
277817
277862
277863' | awk 'NR>1{print}' | xargs -n 4 echo runcommand 
runcommand 274725 275050 275065 277560
runcommand 277801 277814 277817 277862
runcommand 277863

awk命令只是去掉第一行,然后xargs -n 4将为每个最大大小的分组运行子任务echo runcommand

要将文件中的所有数字作为单独的参数运行命令,可以使用

yourcommand $(some_command | sed 1d)

请注意,这假定您的行都是数字,而不是带有空格和要保留的其他 ascii 字符的字符串。

相关内容

  • 没有找到相关文章

最新更新