我正在编写一个bash脚本,我正在读取一个文件,其中包含3行,每行只有1个数字。我必须将每一行设置为一个新变量。我不太确定如何做到这一点,但这就是我现在正在做的事情:
VAR1=0
VAR2=0
VAR3=0
while read line
do
VAR1=$line
VAR2=$line
VAR3=$line
done <$FILE
我得到的结果只是文件中所有3个变量的最后一行。任何帮助你都会很棒。
答案 0 :(得分:2)
信不信由你,你可以使用printf
i=0
while read line; do
((i++))
varname="VAR$i"
printf -v $varname "$line"
done < FILE
来源:Creating a string variable name from the value of another string
答案 1 :(得分:0)
诺西德的答案符合你的要求,但如果你真的需要一个阵列,你可以这样做:
# populate ARRAY
ARRAY=()
while read LINE
do
ARRAY+=("$LINE")
done < test
# subscripting
echo ${ARRAY[0]}
echo ${ARRAY[1]}
echo ${ARRAY[2]}
# looping
for LINE in "${ARRAY[@]}"
do
echo "$LINE"
done
答案 2 :(得分:0)
这可能适合你(BASH):
OIFS=$IFS; IFS=$'\n'; var=($(<file)); IFS=$OIFS
for ((n=0;n<${#var[@]};n++)){ echo "\${var[$n]}=${var[n]}"; }
答案 3 :(得分:0)
我的个人解决方案略有不同,可以在管道中使用。
如果您知道输出将每N行分割一次(本例为2)
YOUR_COMAND | while read line;
do
((i++))
lines[i]=$line
if [ $i = 2 ]; then
echo "You received new output: ${lines[1]} ${lines[2]}"
#do your stuff with all the lines you gathered
i=0;
fi
done