flat7th

memo/20230824

created 2023-08-24 modified 2023-08-24 

seq というコマンドを知らなかった話(bash の for 文で使える)



for i in $(seq 1 5); do echo "i=$i"; done

お恥ずかしい話ですが、 seq というコマンドを今日初めて知りました。




誰向けかわからないけど、見てくれるかもしれない人向けに少し書いてみます。
昨今のAIとかと比べてレベル低い内容ですみません。

bash の 制御文って、他の言語と比べると少し難解です。
for はこんな風に使います。

for i in aaa bbb ccc; do mv $i.x $i.y; done

何が行われるかを知るために、コマンド内容を echo で表示してみます。
for i in aaa bbb ccc; do echo mv $i.x $i.y; done

なお、セミコロンを使わない書き方は以下です。
for i in aaa bbb ccc
do
  echo mv $i.x $i.y
done



[keizo@fedora ~]$ for i in aaa bbb ccc; do echo mv $i.x $i.y; done
mv aaa.x aaa.y
mv bbb.x bbb.y
mv ccc.x ccc.y
[keizo@fedora ~]$ 

この例はファイルの拡張子を変えるという話。
やりたいことのうち、 .x を .y に変更する、ことは1つの事なので1回で書く。
ファイル名の aaa bbb ccc の違いは複数の事なので複数で書く。
で、 aaa bbb ccc の各々を i に代入して $i で参照する訳です。



この in の後に書く aaa bbb ccc が、数値の羅列である場合に seq というコマンドが使える、と。

単独で実行すると
seq 1 5

[keizo@fedora ~]$ seq 1 5
1
2
3
4
5
[keizo@fedora ~]$ 

こうなる。 $(コマンド) でコマンドの実行結果をコマンド文字列に取り込めるので、冒頭のコマンドは、こうなります。

[keizo@fedora ~]$  for i in $(seq 1 5); do echo "i=$i"; done
i=1
i=2
i=3
i=4
i=5
[keizo@fedora ~]$ 

この seq というコマンドを、今日知りましたよ、と。


* 日々のメモ