Bashのマニュアルによると
代替テキストの最初の単語にエイリアスがあるかどうかをテストしますが、拡張されるエイリアスと同じ二次拡張はない予定です。たとえば、別名を指定
ls
できますls -F
が、Bashは代替テキストを再帰的に拡張しようとしません。
参照で「same」の後に続くエイリアスを見つけようとしています。
同じエイリアスを使用して再帰シーケンスで拡張されたエイリアスを拡張する
拡張エイリアスを最初に開始するか、
拡張を開始する最後のエイリアスです。
だから例を作った
$ alias a1=a2;
$ alias a2=a3;
$ alias a3=a4;
a1
次のような場合は、エイリアス拡張の結果を確認したいと思います。
$ alias a4=a1;
または
$ alias a4=a2;
または
$ alias a4=a3;
シェルがエイリアス拡張を実行せずにエイリアス拡張をa1
実行して、エイリアス拡張の結果をどのように確認できますか?a1
答え1
マニュアルによると、シェルはエイリアス拡張の再帰によって引き起こされる可能性のあるループを回避することを示しています。
はい(a1=a2=a3=a4
)の場合、alias a4=a1
ループが生成されます。その後、a1
(resp. a2
、、、a3
)を実行すると、a4
シェルがa1
( resp. a2
、、、a3
)に戻ってループされると、エイリアスではなく(resp。、、、)a4
という名前のコマンドが検索されます(これは無限の循環を生成します)。 )。a1
a2
a3
a4
例:
$ a1() { echo Phew, I got out of the loop; }
$ alias a1='echo "(a1)"; a2' a2='echo "(a2)"; a3'
$ alias a3='echo "(a3)"; a4' a4='echo "(a4)"; a1'
$ a1
(a1)
(a2)
(a3)
(a4)
Phew, I got out of the loop
$ a2 # Command a2 does not exist anywhere
(a2)
(a3)
(a4)
(a1)
a2: command not found
答え2
:> alias e="echo "
:> alias text=foo
:> e text
foo
技術的には、シェルはエイリアス拡張よりも一歩進んでいますが、それにもかかわらず私はそれがあなたが意味するものだと思います。