私は375と3500(375、380、385 ...)の5つの倍数をすべてリストする非常に単純なbashスクリプトを作成しようとしています。私が試したが成功しなかったことの1つは次のとおりです。
for i in {375..3500}
do
echo $i
(($i += 5))
done
私はしばらくして放棄し、BASICで約15秒で次のように書きました。
10 count = 375
20 print count
30 count = count+5
40 if count < 3500 then goto 20
BashスクリプトでBASICプログラムを書くには?
答え1
とにかく中括弧拡張を使用しているので、その機能を活用してください。
echo {375..3500..5}
printf
この手法を使用すると、代替テキストの代わりにを使用して各番号を別々の行に印刷することもできます。echo
例:
$ printf "Number %s is generated.\n" {375..3500..5}
Number 375 is generated.
Number 380 is generated.
Number 385 is generated.
...
編集する
@kojiroがコメントで指摘したように、Mac OSはbash 3をデフォルトのシェルとして使用します。これは中括弧拡張シーケンス式の増分をサポートしません。 bashバージョン4にアップグレードするか、それをサポートする他のシェル(最近のzshなど)を使用する必要があります。
答え2
あるいは、伝統的なCスタイルのforループを使用することもできます。
for ((i=375; i<=3500; i+=5)); do
echo $i
done
これは、seqを使用するよりも明確ではありませんが、子プロセスを作成しません。 Cに慣れているので理解するのは難しくありませんが、YMMVです。
答え3
SEQ(1)の使用
for i in $(seq 375 5 3500)
do
echo $i
done
または簡単に:
seq 375 5 3500
答え4
もちろんこれにはアプリケーションがありますが、コマンドラインでこれを行う方法はいくつかあります(seq 375 5 3500
)。最も高速で簡単な方法はを使用することですがseq
、以下はいくつかの異なるオプションです。
for i in {375..3500}; do [[ (($i % 5)) -eq 0 ]] && echo $i; done
i=370; while [ $i -le 3500 ]; do printf "%s\n" $((i+=5)); done
perl -le '$i=shift;while($i<=$ARGV[0]){print $i; $i+=5; }' 375 3500
perl -le 'map{print $_ + 5} 370..3495'
awk 'BEGIN{ for(i=375;i<=3500;i+=5){print i}}'