2014-02-12 60 views
0

我有命令後輸出: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=.... ? 
+0

你可以試試這個'set $(some_command); shift',那麼它們全部將被放置爲'$ 1'..'$ N'和'$#'將是變量的數量。數組變量'$ @'也將被設置。然後你可以調用一個新程序並像'newprog'一樣傳遞數組$ @「' – alvits

回答

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

+0

這對我有效,謝謝! – Viktor

0

要運行在你的文件作爲獨立參數,所有號碼的命令,你可以使用

yourcommand $(some_command | sed 1d) 

注意,這裏假設你的線條都爲數字,而不是用空格和其他ASCII字符,則字符串想保存。

相關問題