3
0

More than 1 year has passed since last update.

ターミナルのインタープリターを使って文字列+連番を出したい!

Last updated at Posted at 2022-07-20

はじめに

仕事してて

hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438,

みたいな文字列+連番みたいなのをぴゃぴゃっと出したいなーって思ったんですよ。使う用事があったんで。
で、こういうのってターミナルの各言語のインタープリターを使うとやれるんですけど、どうやったっけなー、と思いまして。
備忘録的な感じで。

Ruby

まずはRubyです。Rubyがこういうの一番簡単に行けたイメージあったので。

$ ruby -e '(430..438).each{|i|print "hoge#{i.to_s},"}'

簡潔でいいですね。

ちなみにfor文使うとこうです。結局コレでも内部的にはeachが動いているんだそうです。

$ ruby -e 'for i in 430..438 do print "hoge#{i.to_s}," end'

@scivola さんからコメントで頂いたのですがこんな書き方もあるとのことです。upto初めて知った……
_1と書いてあるのはNumbered Paramaterというもので、これはruby2.7以降でないと動かないです。

$ ruby -e '(430..438).each{ print "hoge#{_1}," }'  

$ ruby -e '430.upto(438){ print "hoge#{_1}," }'

@ttdoda さんから頂いたものをもとにこんな感じのものを。配列にしてガッチャンコ……!

ruby -e 'print (430..438).to_a.map{|i|"hoge#{i}"}.join(","), ","'

Python

pythonはワンライナーだと一筋縄では行かないですね。rangeで指定するendは終わって欲しい数字の1つ後を指定します。

$ python3 -c 'for i in range(430,439):print(f"hoge{str(i)},")'

これだと結果がこうですね。

hoge430,
hoge431,
hoge432,
hoge433,
hoge434,
hoge435,
hoge436,
hoge437,
hoge438,

配列ガッチャンコパターンはこんな感じ。出力も想定通りでいい感じです。

$ python3 -c 'print(",".join(map(lambda i: f"hoge{i}", range(430,439))))'

hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438

PHP

我らがPHPはこんな感じですね。PHPでワンライナーやるのはやや心がもにょりますね。

$ php -r 'foreach(range(430,438) as $i){echo "hoge{$i},";}'

一瞬引っかかるのも微妙な気分を助長させますね。

配列にしてガッチャンコパターンだとこんな感じですかね。長い……

$ php -r 'echo implode("," ,array_map(fn($i) => "hoge{$i}", range(430,438)));'

Node.js(JavaScript)

JSはrange的なものがないのでちょっと面倒です。無理くりrangeっぽいものをやろうとすると逆に長いのでfor文にしました。

node -e 'for(let i=430;i<439;i++)console.log(`hoge${i},`)'

出力はpythonのときと同じになります。

配列ガッチャンコパターンだとこんな感じ。range相当部分が不毛すぎる。。。ただ出力はいい感じですね。

node -p '((s, e) => [...Array((e - s) + 1).keys()].map((_, i) => s + i))(430, 438).map(j => `hoge${j}`).join(",")'

hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438

SHELL芸

そもそもインタープリター通さずともシェル芸人さんはシェルだけで行けるわけで

$ for i in {430..438}; do echo hoge$i,; done

fishでは動きません。bashとzshで動くことは確認しました。一番簡単で簡潔な気がする……

ちなみにこちらが昔書いたシェルの記事です。

下のコメントで @ttdoda さんにもっとイカすやり方を教えてもらいました✨

$ echo hoge{430..438},|tr -d ' '

何だこれ、最強か? さすがTera Termの中のお人やで……(゚A゚;)ゴクリ

おわりに

いかがでしたでしょうか。
多分こういうワンライナー系だとrubyが一番手軽だと思うので、ruby学ぶのはいいことかもしれません。
やっぱSHELL芸最強〜〜〜!!

3
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0