使用Bash脚本中的for循环定义具有位置参数的变量



有没有一种方法可以在Bash中使用循环定义一组位置参数变量?例如,下面是我想要实现的

mid_1=$1   
freq_1=$2 
mid_2=$3
freq_2=$4
mid_3=$5
freq_3=$6
mid_4=$7   
freq_4=$8

我的代码:

q=4
q_len=$(( q*2+1 ))
all_var=()
j=1
l=2
for (( i=1; i<$q_len; i+=2 ))
do
declare mid_$j=$$i freq_$j=$$l
all_var+=(mid_$j freq_$j)
j=$(( j+1 ))
l=$(( l+2 ))
done
for item in "${all_var[@]}"; do echo -n "$$item "; done;

一开始,它看起来是对的。

echo $mid_2
$3

错了。在bash中定义,mid_2=$3,echo$mid_2,我们应该得到空的返回,因为没有位置参数。

此外,我从第二圈得到了回报。

$mid_1 $freq_1 $mid_2 $freq_2 $mid_3 $freq_3 $mid_4 $freq_4

这是错误的,它应该是空的。如何在这种情况下定义变量并回显变量的每个值?请告知,谢谢。

不要使用mid_1mid_2等变量。使用数组。

mid=()
freq=()
while (( $# >= 2 )); do
mid+=("$1")
freq+=("$2")
shift 2

现在您可以使用${mid[0]}${freq[0]}${mid[1]}${freq[1]}等等

最新更新