Bash存储变量就像for循环一样

时间:2015-04-26 21:47:49

标签: bash

鉴于for循环情况, Loop1,一个整数将存储在一个名为var1的变量中。 Loop2,另一个整数将替换var1中的值。 以上不是我想要的。 我想将第二个整数存储到一个名为var2的新变量中。 这个循环将循环30个循环,如果我可以让var1到var30都有不同的变量,那将是非常棒的。感谢

我的代码

b=1
for i in `ls RQ=RECORD\&rank=*.html | sort -V`
do


    tallyimpact=$(sed -n 's/.*has an Impact Factor of <strong>\(.*\)<\/strong>.*/\1/ip;T;q' $i) 
    var$b=$tallyimpact
    let "b++"
    blah blah blah
    blah blah blah
done

我得到的是

boxplot2.sh: line 22: var1=162.500: command not found
boxplot2.sh: line 22: var2=54.420: command not found
boxplot2.sh: line 22: var3=45.661: command not found
boxplot2.sh: line 22: var4=42.860: command not found
boxplot2.sh: line 22: var5=42.351: command not found
boxplot2.sh: line 22: var6=41.392: command not found

2 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

for i in $(seq 30); do
  let var$i=$i*$i
done

结果将是:

var1=1
var2=4
var3=9
...

答案 1 :(得分:0)

bash 索引数组特别适合您描述的内容。在外部循环中,var1的值可以设置为您喜欢的任何值。在内部循环中,所有值(无论何种类型)都可以存储在数组中,并在设置时可用。这允许在整个外循环中保留var1的值。一个简单的例子(为简洁而修剪输出):

#!/bin/bash

declare -a array

for ((i = 1; i < 3; i++)); do

    var1=$i                             ## set var1 to some value

    for ((j = 0; j < 30; j++)); do
        array+=( $((i * j)) )           ## fill the array '+=' adds each
    done                                ## value to the next array element

    printf "\n var1 : %d\n" "$var1"     ## output all values
    for ((j = 0; j < ${#array[@]}; j++)); do
        printf "    array[%2d] : %d\n" "$j" "${array[j]}"
    done

    unset array                         ## unset/reset array

done

<强>输出

$ bash array_var1.sh

 var1 : 1
    array[ 0] : 0
    array[ 1] : 1
    array[ 2] : 2
    array[ 3] : 3
    array[ 4] : 4
    array[ 5] : 5
    array[ 6] : 6
    array[ 7] : 7
    array[ 8] : 8
    array[ 9] : 9
    array[10] : 10
    <snip>

 var1 : 2
    array[ 0] : 0
    array[ 1] : 2
    array[ 2] : 4
    array[ 3] : 6
    array[ 4] : 8
    array[ 5] : 10
    array[ 6] : 12
    array[ 7] : 14
    array[ 8] : 16
    array[ 9] : 18
    array[10] : 20
    <snip>

注意:数组在每个外部循环的末尾都是unset,以防止它保留循环中设置的值。