读取文件的多行然后将每行设置为不同的变量

时间:2013-10-05 20:01:47

标签: bash

我正在编写一个bash脚本,我正在读取一个文件,其中包含3行,每行只有1个数字。我必须将每一行设置为一个新变量。我不太确定如何做到这一点,但这就是我现在正在做的事情:

    VAR1=0
    VAR2=0
    VAR3=0

    while read line
    do
            VAR1=$line
            VAR2=$line
            VAR3=$line
    done <$FILE

我得到的结果只是文件中所有3个变量的最后一行。任何帮助你都会很棒。

4 个答案:

答案 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