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にパイプを実装しました。

で、それはいいんですが、今日、コードを整理していて、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できれいに(?)書き直してますので、ご声援おねがいいたします。

以上。

ノート   このエントリーをはてなブックマークに追加 
 

prev:最近のママ活ならぬシェル活について next:jus共催 第59回シェル芸勉強会リンク集

やり散らかし一覧

記事いろいろ