「拡張しているエイリアスと同じ単語は再び拡張されません。」

「拡張しているエイリアスと同じ単語は再び拡張されません。」

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という名前のコマンドが検索されます(これは無限の循環を生成します)。 )。a1a2a3a4

例:

$ 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

おすすめ記事