鉴于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
答案 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
,以防止它保留循环中设置的值。