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

时间:2014-02-12 01:24:49

标签: bash

我在命令后输出了这个:

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

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

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

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

$ some_cmd $ var1 $ var2 ... $ varN

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

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

但这不是最简单的解决方案,我不知道如何设置循环,我将设置变量以及如何构造命令。也许是这样的事情?:

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

2 个答案:

答案 0 :(得分:1)

看起来你将它们放入变量只是为了将它们传递给另一个函数/程序。这实际上并不是必需的。

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

答案 1 :(得分:0)

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

yourcommand $(some_command | sed 1d)

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