質問: unix/linuxの「エイリアス置換」について unix/linuxの「エイリアス置換」のところで教えてください。 書籍に次のような記述がありました。 (なお、¥は「バックスラシュ」の意味です。) エイリアス置換をエスケープするには、コマンドの前に「¥」をつけます。たとえば、このようにrmが「rm -i」にエイリアスされている場合に、エイリアスされたrmではなく、本来のrmを実行したいならば、次のようにrmの前に「¥」をつけます。 % \rm test.txt エイリアス置換はそれ以上エイリアス置換ができなくなるまで繰り替えします。そのため、エイリアスの定義によってはエイリアス置換が止まらなくなることもあります。これを防ぐには、エイリアス置換の必要のないコマンドはエイリアス置換をエスケープしておくといいでしょう。 % alias rm \\rm -i % alias rm (\rm -i) 【質問1】この2つめの段落の「エイリアス置換が止まらなくなることもあります」とはどのような事を指しているのでしょうか。 【質問2】このrmは「エイリアス置換をエスケープ」しているはずなのですが、試してみると、-iコマンドが生きていました。つまり、 alias rm \\rm -i と、 alias rm rm -i は同じ動きでした。何がいけないのでしょうか。
回答: 書式からして csh 系だと思うのでそれに従って: 1 の方: 例えば alias rm rm -i としたとします. これは, 「コマンドラインが rm という単語で始まっていたら, それを rm -i で置き換える」という意味です. そこで rm foo と入力すると, これは rm という単語で始まっているので rm -i foo と置き換えられます. ところが, これもやはり rm という単語で始まっているのでさらに rm -i -i foo に置き換わります. さらに (以下略) 2 の方: 普通は alias rm \\rm -i だと rm foo という入力に対して \rm -i foo に置き換えるんですが, これは rm という単語で始まっているとはみなさないのでここで置き換えが終了します. 一方, 最初から \rm foo と入力すると全く置き換えはされません. この場合には -i を付けずに実行されます. なお, csh はかなりアドホックな (あるいは「いきあたりばったりな」) 実装になっているので, alias rm rm -i でも 1 で述べたような問題は発生しない*かも*しれません.