0

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

    VAR1=0
    VAR2=0
    VAR3=0

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

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

4

4 回答 4

2

信不信由你,您可以使用printf

i=0
while read line; do
  ((i++))
  varname="VAR$i"
  printf -v $varname "$line"
done < FILE

来源:从另一个字符串的值创建一个字符串变量名

于 2013-10-05T20:28:06.123 回答
0

这可能对你有用(BASH):

OIFS=$IFS; IFS=$'\n'; var=($(<file)); IFS=$OIFS
for ((n=0;n<${#var[@]};n++)){ echo "\${var[$n]}=${var[n]}"; }
于 2013-10-06T15:43:32.313 回答
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
于 2014-05-07T12:12:21.500 回答
0

Nosid 的答案可以满足您的需求,但如果您真的需要一个数组,您可以这样做:

# 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
于 2013-10-05T20:17:19.103 回答