zsh中的数组和循环


9

我正在尝试学习中的循环和数组操作zsh

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

LOCAL_ARRAY=($LOCAL_PATH_1 $LOCAL_PATH_2 $LOCAL_PATH_3)
REMOTE_ARRAY=($REMOTE_PATH_1 $REMOTE_PATH_2 $REMOTE_PATH_3)

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

cd $LOCAL_PATH_i
hg pull $REMOTE_PATH_i

在每次迭代中。如何在zsh中执行此操作?

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

Answers:


13

15.2.1“数组下标”说,数组可以用索引[exp](其中exp是一个数字表达式),并且元素从索引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

或者,如果您使用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

使用KSH_ARRAYSmake数组以索引0开头,需要在数组表达式中使用花括号,并解释$array$array[0](要求更改数组长度表达式)。如果KSH_ARRAY没有KSH_ARRAY,所需的语法更改也将起作用,但是您仍然必须针对不同的索引范围(1到N与0到N-1)调整逻辑。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.