有没有一种方法可以在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_1
、mid_2
等变量。使用数组。
mid=()
freq=()
while (( $# >= 2 )); do
mid+=("$1")
freq+=("$2")
shift 2
现在您可以使用${mid[0]}
、${freq[0]}
、${mid[1]}
、${freq[1]}
等等