コンソール上で文字列を反転する場合というと、基本的には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
ちなみに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