zsh 中的数组和循环

Ame*_*ina 11 zsh array

我正在尝试在zsh.

假设我在 zsh 中有两个数组,它们具有相同的未知元素#,每个数组都包含一个路径列表,例如

LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3)
REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3)
Run Code Online (Sandbox Code Playgroud)

我想使用公共索引同时遍历两个数组,以便我可以执行以下操作:

cd $LOCAL_PATH_i
hg pull $REMOTE_PATH_i
Run Code Online (Sandbox Code Playgroud)

在每次迭代中。我怎样才能在 zsh 中做到这一点?

另外,我在zsh 文档中搜索了循环控制和数组,但收效甚微。有没有介绍zsh中循环数组等基础知识的好教程?适合那些几乎没有 bash 或 shell 脚本经验但有编程背景的人吗?

Chr*_*sen 13

15.2.1“数组下标”说数组可以用[exp](whereexp是数值表达式)作为索引,并且元素从索引 1 开始(如果KSH_ARRAYS设置为0 )。

14.3“参数扩展”说语法${#array_name}将扩展到数组的元素数。

部分6.3“复杂的命令”给出一个数值的语法for环(如在C):
for (( initExpr ; testExpr ; stepExpr )) do … done

把它们放在一起:

for (( i = 1; i <= $#LOCAL_PATH; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd $LOCAL_PATH[i]
        hg pull $REMOTE_PATH[i]
    )
done
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在使用KSH_ARRAYS,那么这个:

for (( i = 0; i < ${#LOCAL_PATH[@]}; i++ )) do
    ( # subshell to contain the effect of the chdir
        cd ${LOCAL_PATH[i]}
        hg pull ${REMOTE_PATH[i]}
    )
done
Run Code Online (Sandbox Code Playgroud)

使用KSH_ARRAYS使数组从索引 0 开始,需要对数组表达式使用大括号,并解释$array$array[0](需要更改数组长度表达式)。所需的语法更改KSH_ARRAY也可以在没有 的情况下工作KSH_ARRAY,但您仍然需要调整不同索引范围(1 到 N 与 0 到 N-1)的逻辑。