はじめに
仕事してて
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芸最強〜〜〜!!