@kyanny's blog

My life. Opinions are my own.

eshell の for-in ループ

eshell の for-in ループは、http://www.bookshelf.jp/pukiwiki/pukiwiki.php?Eshell%A4%F2%BB%C8%A4%A4%A4%B3%A4%CA%A4%B9#content_1_11にあるように

for i in 1 2 3 4 5 { echo $i > $i.inc }

のように書くのですが、これと等価に思える bash の

for i in 1 2 3 4 5 ; do echo $i > $i.inc ; done

とは、実行後に作られるファイルの中身が違う。 bash のほうは n.inc の中身が n 一文字で、期待した内容。しかし eshell のほうは、 1.inc に 12345 とかかれている。一個ずつ少なくなり 5.incの中身は 5 のみ。なんでこうなるのだろう。

for i in 1 2 3 4 5 { echo $i > $i.inc; echo $i }

としたら bash と等価な内容になった。よくわからないけど局所変数に前のループの値が残っちゃっているのか。

あと (eshell-ask-to-save-history (quote always)) とかやっているのに有効になってくれず、毎回 Emacs 終了時に y/n を聞かれて面倒くさい。 (setq eshell-ask-to-save-history 'always) とかもだめなようだ。バージョン古いのかと思って最新版を落としてきたが、テストがうまくいかない(はしらない?)のでインストールできず。