コンソール上でrevコマンドなしで文字列を反転表示させてみる

コンソール上で文字列を反転する場合というと、基本的にはrevコマンドを利用する。
で、もしそれを使わない場合どんな感じにできるかなと思ったので、ちょっとやってみた。awkなら結構楽にできるのだが、個人的なマイブームからまずbashの変数展開を利用してみる。

で、残念ながら1行の出力にしか対応してないけど、以下のようにコマンドを実行することで出力を反転させることができる。
(forでreadlineにすれば複数行もいけると思うけど、ワンライナーでそれやるのはちょっとアレかなと思ったのでそれ以上は追求していない)

コマンド|(set -a;read i;l=${#i};echo eval 'printf\ \$'{i:\\ -{1..$l}:1}'\;'|bash)|echo $(cat)
blacknon@BS-PUB-UBUNTU-01:~$ echo {A..Z}|tr -d ' '
ABCDEFGHIJKLMNOPQRSTUVWXYZ
blacknon@BS-PUB-UBUNTU-01:~$ echo {A..Z}|tr -d ' '|(set -a;read i;l=${#i};echo eval 'printf\ \$'{i:\\ -{1..$l}:1}'\;'|bash)|echo $(cat)
ZYXWVUTSRQPONMLKJIHGFEDCBA
Sponsored Links

ちなみにawkの場合だとこんな感じ。
こっちだと複数行でもいけるので、基本は(そもそもrev使えればそっち使うだろというのはあるけど)こっちのほうがよさそうだ。

コマンド|awk '{i="";for(l=length($0);l!=0;l--) i=(i substr($0,l,1))}{print i}'
blacknon@BS-PUB-UBUNTU-01:~$ echo {A..Z}|tr -d ' '|awk '{i="";for(l=length($0);l!=0;l--) i=(i substr($0,l,1))}{print i}'
ZYXWVUTSRQPONMLKJIHGFEDCBA

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*