bashの代入とリダイレクトの変態挙動
Sat Jun 11 22:24:50 JST 2022 (modified: Sat Jun 11 22:36:34 JST 2022)
views: 4038, keywords:日記, Rusty Bash この記事は最終更新日が2年以上前のものです。
昨日、自作のbashクローンであるRusty Bashにパイプを実装しました。
パイプつかえるようになりましたー!#rusty_bashhttps://t.co/EmMlWYGhsi pic.twitter.com/iwjaubInSR
— 上田 隆一 (@ryuichiueda) June 10, 2022
で、それはいいんですが、今日、コードを整理していて、bashのリダイレクトと変数の代入について気づいたことをメモしておきます。私の書いてるシェルじゃなくて、本家bashの話です。
変数の代入の行に無意味なリダイレクトを入れることが可能
・・・です。次のように、リダイレクトを入れるとファイルができます。
A=💩 > file
$ echo $A
$
💩ls -l file
$ -rw-rw-r-- 1 ueda ueda 0 6月 11 22:15 file
途中にリダイレクトを入れることも可能です。
A=💩 > file B=🚽
$ echo $A$B
$ 💩🚽
もしかしたら何かに使えるのかもしれませんが、わかりません。
変数の代入やリダイレクトをパイプにつなぐことが可能
ただし、データは吸い込まれます。そして、変数への代入はたぶんサブシェルで行われるので、反映されません。
echo 王様の耳はロバの耳 | A=B
$
(出力なし)echo 王様の耳はロバの耳 | 2>aho | rev
$
(出力なし)echo 王様の耳はロバの耳 | A=💩 | rev
$ (出力なし)
これも・・・なにかに使えるんですかね???
(おまけ)変数へ代入する値にはブレース展開が使えない
これはブレース展開を実装しているときに気づいたのですが・・・
A={a,b}{c,d}
$ echo $A
$ {a,b}{c,d}
A=$(echo {a,b}{c,d}) #これは展開される。
$ echo $A
$ ac ad bc bd
微妙に不便なような気がするけど、使う場面もないような・・・
bashのコードを読めばいいじゃないか
・・・と言われても、あのコードを読むのは・・・
ということで
Rustできれいに(?)書き直してますので、ご声援おねがいいたします。
以上。