如何逐行读取变量
PROMOTEBUILDS=3.1.161,1.0.132
echo cat ${PROMOTEBUILDS} | while read -r line; do
egrep $line /home/rahul-optit/packages
done
答案1
由于您使用的是 bash,因此您应该使用大批而不是变量:
promotebuilds=( 3.1.161 1.0.132 )
for i in "${promotebuilds[@]}"; do
egrep "$i" /home/rahul-optit/packages
done
答案2
@Jesse_b 的答案就是这样做的方法。
但是,如果您对输入没有影响,则可以使用IFS=,
和read
来分割字符串并将其设为数组。
printf '%s' "$PROMOTEBUILDS" | IFS=, read -a promotebuilds
for i in "${promotebuilds[@]}"; do
egrep "$i" /home/rahul-optit/packages
done
答案3
也许我不明白这个问题。一方面,您的变量似乎只有一行。
一直以来,我都以与从常规文件中读取行相同的方式从变量中读取行,只不过我将其用引号引起来并使用“<<<”而不是“<”将其输入到 while 循环。
VARIABLE=$(cat somefilewithmultiplelines)
while read i ; do echo "$i" ; done <<< "$VARIABLE"