如何使用两个不同的变量迭代命令?

如何使用两个不同的变量迭代命令?

使用内核 2.6.x

GNU bash,版本 4.3.42(1)-release (arm-openwrt-linux-gnu)

在 bash 脚本中,如何编写一个 for 循环来使用下面的变量生成以下结果?

command option option abc option 10
command option option def option 20

VAR1=“abc def”

VAR2=“10 20”

我可以迭代 $VAR1,但我不知道如何迭代 $VAR2。

for i in $VAR1; do
command option option "$VAR1" option "$VAR2"
done

是否应该将命令行拆分为两个字符串,分别迭代然后连接?

将计数变量与数组一起使用怎么样?例如 ...

count=1
echo ${VAR1["$count"]}

带 while 循环的 count 变量可以工作吗?

答案1

这个怎么样:

arr1=(abc def)
arr2=(10 20)

进而:

for (( i=0; i<${#arr1[@]}; i++ )); do echo "${arr1[i]} ${arr2[i]}"; done
abc 10
def 20

在您的情况下, echo 语句将如下所示:

for (( i=0; i<${#arr1[@]}; i++ )); do 
    echo "command option option ${arr1[i]} option ${arr2[i]}"
done
command option option abc option 10
command option option def option 20

这里例如 bash 中 C 风格的 for 循环。

答案2

使用以下方法更容易zsh

$ a=(a b c) b=(1 2 3)
$ for i j (${a:^b}) echo "i: $i, j: $j"
i: a, j: 1
i: b, j: 2
i: c, j: 3

${a:^b}是数组压缩运算符(扩展为上面的a, 1, b, 2, c, 3)。

如果您想循环遍历 split+glob 运算符应用于类似 POSIX 的 shell 中的单词$VAR1(例如根据@maulinglawns 的答案的评论您似乎正在使用的$VAR2busybox ),您可以使用位置参数。sh

VAR1='a b c'
VAR2='1 2 3'
set -- $VAR1
for j in $VAR2; do
  echo "i: $1, j: $j"
  shift
done

相关内容