ループ配列変数の問題のZSH
私はZSHで働いていますが、BASH命令もおそらく役立つでしょう。配列lwに格納されている値を通過し、配列に格納されている名前に基づいてシェルスクリプトを起動するforループが必要です。
これまでのところ、これは私が思いついたものです:
$lw=('plugin1' 'plugin2' 'plugin3')
for i in $lw;
do . ~/Library/Rogall/plugins/$lw[$i]/lw.prg end;
done
〜/ Library/Rogall/plugins // lw.prgが見つからないという実行時のエラーが表示されるだけなので、変数をすべて無視するように見えます。
私がめちゃくちゃにしたアイデアはありますか?
それは実際にはそれよりはるかに単純です:
lw=('plugin1' 'plugin2' 'plugin3')
for i in $lw; do
. ~/Library/Rogall/plugins/$i/lw.prg end
done
要約すれば:
$foo
ではなくfoo
に割り当てます(シェルは$foo
を展開しようとして、展開するものに割り当てます。通常は役に立ちません)- ループ変数を直接使用します。 indexではなく、配列valueが含まれています
なぜアレイを使用するのですか?これはポータブルshで非常に簡単に実行できます。
lw='plugin1 plugin2 plugin3'
for i in $lw;
do . ~/Library/Rogall/plugins/$i/lw.prg end
done
これをzshで機能させるには、zshで次のことを正しく実行する必要があることに注意してください:set -o shwordsplit
私はこのようなループが問題を抱えていました
for i in (1 2 3 4); do echo $i; done
思ったように繰り返し機能しませんでした。 zsh: unknown file attribute: 1
のようなエラー、または
1 2 3 4
望みの代わりに、私がそれをどのように再歪曲したとしても
1
2
3
4
希望する動作を得るには、ループ定義からin
キーワードを削除する必要がありました
for i (1 2 3 4); do echo $i; done
1
2
3
4