我正在尝试在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)的逻辑。