【发布时间】:2023-04-06 14:20:01
【问题描述】:
自从我编写密集的 bash 脚本以来已经有一段时间了,我忘记了在 for 循环中执行多个条件的语法。
在 C 语言中,我会这样做:
for(var i=0,j=0; i<arrayOne.length && j<arrayTwo.length; i++,j++){
// Do stuff
}
我在谷歌上搜索了一段时间,只发现涉及嵌套 for 循环的语法,而不是一个 for 循环的多个条件。
【问题讨论】:
自从我编写密集的 bash 脚本以来已经有一段时间了,我忘记了在 for 循环中执行多个条件的语法。
在 C 语言中,我会这样做:
for(var i=0,j=0; i<arrayOne.length && j<arrayTwo.length; i++,j++){
// Do stuff
}
我在谷歌上搜索了一段时间,只发现涉及嵌套 for 循环的语法,而不是一个 for 循环的多个条件。
【问题讨论】:
听起来你在谈论 for 循环的算术运算。
for ((i = j = 0; i < ${#arrayOne[@]} && j < ${#arrayTwo[@]}; i++, j++)); do
# Do stuff
done
假设i 和j 未设置或为零,则大致相当于:
while ((i++ < ${#arrayOne[@]} && j++ < ${#arrayTwo[@]})); do ...
只要你不关心循环后i/j 的值,就更便携了。
【讨论】:
如果和C比较,差别不大
for (( c=1,d=1; c<=5 && d<=6; c++,d+=2 ))
do
echo "$c : $d"
done
【讨论】:
x[0]="test 1"; x[1]="test 2"; for i in "${x[@]}"; do echo $i; done
for in 迭代参数。它与“条件”没有任何关系,并且不能在没有嵌套的情况下执行与 c 样式循环等效的操作。 for i in "${arrayOne[@]}" "${arrayTwo[@]}"; do 将依次迭代每个数组的元素。