- 締切済み
shellのfor文の書き方についての質問です
使い始めたばかりなので、くだらない質問かもしれないのですが、調べてもわからないのでよろしくお願いします。 shellで、for文を使いたいのですが、その中身が多くて、 for s in 3000 3001 3002 ・・・7999 do 中身 done と打つ以外の便利な方法が知りたいのですが、なにかありますでしょうか??例えば、in の中身を3000から8000未満までと一気に指定出来るような。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
#2です。前回の回答を投稿してからちょっと飲んで帰ってきたので、普段なら投稿しないことですが投稿してしまいます。部分的に(あるいは全文)規約違反かもしれません。 まずは、質問者さんに対して。 根拠はありませんが#3さんの回答のほうがBetterだと思います。根拠がないというのは#3さんのせいではなく、私がまだ#3の回答を理解できていないからです。しかし、#3さんは私よりもこのあたりのことを熟知している方ですので(普段の回答から)信頼のおける回答だと思います。今回の件ではどちらでもいいかもしれませんが。 #3さんへ。 いつも回答拝見しております。 > Linuxならseqはあるでしょうから、#2の方の方法が簡単でしょう。 確かにLinuxとは書いてありませんね。UNIXはちゃんと使ったことがないので、seqがあるかどうかもよくわかりませんでした。 > ただ、数千ならいいでしょうが、数百万とかだとやめたほうがいいかも。それだけの文字列がメモリ上に作られるので。 確かに、それは気になっていたことです。まだ#3の内容を理解しておりませんが(2重括弧の意味とか)、知らないことがたくさんあるのを思い知ります。有意義な御指摘に感謝します。 P.S. #3さんのツッコミがうれしくて、酔いが醒めたら恥ずかしい思いをするのは覚悟で投稿しました。酔っ払っての投稿なので、質問者さんに不快な感じを与えたかもしれません。だとしたら大変申し訳ないことだと思っております。
- notnot
- ベストアンサー率47% (4900/10359)
Linuxならseqはあるでしょうから、#2の方の方法が簡単でしょう。 ただ、数千ならいいでしょうが、数百万とかだとやめたほうがいいかも。それだけの文字列がメモリ上に作られるので。 Linuxならbashでしょうから、Cをご存じなら、 for((s=3000;s<8000;++s)) do .... done でもOK。カッコは二重です。
bashで回答。 $ cat sample.sh for i in `seq 3000 1 3010` do echo i: $i done $ bash sample.sh i: 3000 i: 3001 i: 3002 i: 3003 i: 3004 i: 3005 i: 3006 i: 3007 i: 3008 i: 3009 i: 3010 確認用なので範囲は3000~3010。でも数字を変えるだけですね。
forではないけれど、 i=3000 while [ $i -lt 8000 ] do echo $i i=`expr $i + 1` done とかやってみるのはどうでしょう。