使用内核 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 的答案的评论您似乎正在使用的$VAR2
busybox ),您可以使用位置参数。sh
VAR1='a b c'
VAR2='1 2 3'
set -- $VAR1
for j in $VAR2; do
echo "i: $1, j: $j"
shift
done