
次のようにシェルに整数範囲の配列を作成したいとします。
- 次から始まった
$START_VALUE
- 次に終わる
$END_VALUE
- 要素
$STEP_SIZE
はで始まり区切ります$START_VALUE
。
Pythonに精通している人なら誰でも効果的に探しています。range
Bourneシェルの対応項目、特にZshです。
ここに役立つシェル組み込み機能はありますか?
注:Pythonのrange
関数は範囲配列の増加と減少をサポートします(たとえば、$START_VALUE
より大きいまたは小さい場合$END_VALUE
)。
答え1
Bashと同様に、zshから、これは動作します:
printf '%s ' {2..23..3}; echo
これはまた働くので:
set -- {2..23..3}
for i
do echo "$i"
done
このように:
set -- {2..23..3}
for i; do
echo "$i"
done
このように:
for i in {0..20..2}
do
echo "$i"
done
zshでは機能しますが、bashでは機能しないのは変数の範囲です。
a=2 b=23 c=3
set -- {$a..$b..$c}
for i
do echo $i
done
答え2
Bashとzshでは{START..STOP..INCRMENT}を使用でき、START < STOPの場合は期待どおりに機能します。例えば、
for i in {0..20..2}
do
echo $i
done
0、2、4、6、...、20を印刷します。 Bashでは、範囲を{20..0..-2}に変更して「逆方向」範囲を実行することもできます。それから20、18、16、。 .., 2, 0. しかし、これはzshでは動作しません。
bashとzshの両方で動作する方法はseqを使用することです。
for i in `seq 20 -2 0`;
do
echo $i
done
20、18、16、...、0(bashとzshから)を印刷します。ここで形式はFIRST、STEP、LASTです(STEPはオプションで、省略すると1になります)。