zshの配列とループ


9

でループと配列操作を学習しようとしていますzsh

たとえば、zshに2つの配列があり、未知の要素数が同じで、それぞれにパスのリストが含まれているとします。

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やシェルスクリプトの経験はほとんどないが、プログラミングの経験がある人のために何かありますか?

回答:


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_ARRAYSすると、配列はインデックス0で始まり、配列式に中括弧を使用する必要があり、(配列の長さ式の変更が必要)と解釈さ$array$array[0]ます。で必要な構文の変更KSH_ARRAYもなしでも機能しKSH_ARRAYますが、異なるインデックス範囲(1〜Nと0〜N-1)のロジックを調整する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.