Zsh

zsh 中的數組和循環

  • April 17, 2021

我正在嘗試學習循環和數組操作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)。

引用自:https://unix.stackexchange.com/questions/22948