2013-11-27 46 views
0

例:如何分配變量的值數組中的UNIX腳本

 $cat macro 
     File abc.txt 
     File xyz.csv 
     File bdc.txt 
     File lkm.csv 
     File cde.txt 

做grep來只得到* .txt文件名

$grep -oh "\w*xml\w*" macro 
    abc.txt 
    bdc.txt 
    cde.txt 

現在我需要將這些grep結果傳遞給數組,下面給出的代碼不能正常工作。我也可以不存儲所有單個變量grep的結果即作爲陣列的獨立變量

$cat txt.sh 
     var=$(grep -oh "\w*xml\w*" macro) 
     echo ${var[0]} #echo var ---both displays same result. 

輸出

abc.txt bdc.txt cde.txt 

但我想他們在值陣列分配如下

>var[0]=abc.txt 
    >var[1]=bdc.txt 
    >var[2]=cde.txt 

注意:xml文件的數量可能會有所不同。所以它應該是動態的。我也在努力.. 在此先感謝。

+0

不幸的是數組是由一些提供非標準擴展:

取決於你想要做什麼,它可能陣列讀取之後是一個好主意,以節省$ IFS的舊值,並恢復它shell,你需要指定你正在使用哪一個(至少要知道第一個元素是否有索引1或0) – loreb

回答

0

您的var變量不是數組。考慮它只是一個變量,其中grep的結果由空格分隔。這可能是一種解決方法。

for eachval in var 
do 
echo $eachval 
#process operations 
done 

循環的每次迭代使從variable.If你確信你想要一個數組變量的項目,在環

0

初始化它在你的shell腳本的開頭剛剛成立的IFS殼變量到\ n到單獨用「\ n」字段

IFS=$'\n' 
$cat txt.sh 
var=$(grep -oh "\w*xml\w*" macro) 
echo ${var[0]} #echo var ---both displays same result. 

Explanantion::$ IFS是bash的輸入字段分隔符,將其設置爲換行字符只(\ n)的確保您的輸出線不會在whitespac上分裂e,以便可以將每行保存爲單獨的數組元素。沒有這個,你的命令輸出中的每個單詞都將是一個不同的元素。

oldifs="$IFS" 
IFS=$'\n' 
array=($(echo -e "foo bar\nbaz bar")) 
IFS="$oldifs" 
相關問題