例如:
$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 :(得分:0)
你的var变量不是array.Consider它只是一个变量,其中grep的结果用空格分隔。这可能是一种解决方法。
for eachval in var
do
echo $eachval
#process operations
done
循环的每次迭代都会从变量中提供一个项目。如果您确定需要一个数组变量,请在循环中初始化它
答案 1 :(得分:0)
在shell脚本的开头,只需将IFS shell变量设置为\ n,以便按'\ n'分隔字段
IFS=$'\n'
$cat txt.sh
var=$(grep -oh "\w*xml\w*" macro)
echo ${var[0]} #echo var ---both displays same result.
解释::$ IFS是bash的输入字段分隔符,仅将其设置为换行符(\ n)确保您的输出行不会在空格上分割,以便您可以保存每个line作为单独的数组元素。如果没有这个,命令输出的每个单词都将是一个不同的元素。
根据你想要做的事情,保存$ IFS的旧值并在读取数组后恢复它可能是个好主意:
oldifs="$IFS"
IFS=$'\n'
array=($(echo -e "foo bar\nbaz bar"))
IFS="$oldifs"