Zsh
zsh 中的數組和循環
我正在嘗試學習循環和數組操作
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 腳本編寫經驗但有程式背景的人?
第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_ARRAYS
使數組從索引 0 開始,需要對數組表達式使用大括號,並解釋$array
為$array[0]
(需要更改數組長度表達式)。所需的語法更改KSH_ARRAY
也可以在沒有 的情況下工作KSH_ARRAY
,但您仍然需要調整不同索引範圍的邏輯(1 到 N 與 0 到 N-1)。