Bourneシェルのカスタムステップサイズを持つ範囲配列

Bourneシェルのカスタムステップサイズを持つ範囲配列

次のようにシェルに整数範囲の配列を作成したいとします。

  • 次から始まった$START_VALUE
  • 次に終わる$END_VALUE
  • 要素$STEP_SIZEはで始まり区切ります$START_VALUE

Pythonに精通している人なら誰でも効果的に探しています。rangeBourneシェルの対応項目、特に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になります)。

関連情報