Bash:シェル補間でエイリアスが認識されません。

Bash:シェル補間でエイリアスが認識されません。
~$ bash --version
GNU bash, version 5.1.12(1)-release (x86_64-pc-linux-gnu)
~$ alias bab=python
~$ $(echo bab)
bash: bab: command not found

私はbabが「python」になると予想しましたが、そうではありません。

~$ $(echo alias)
alias bab='python'
alias ls='ls --color=auto'
~$ bab
Python 3.10.1 (main, Dec 11 2021, 17:22:55) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

しかし、エイリアスは認識され、補間の外部で動作します。補間内で動作しないのはなぜですか?

eval働く:

~$ eval $(bab)
Python 3.10.1 (main, Dec 11 2021, 17:22:55) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

まだ理由を知りたいです。

答え1

エイリアスが拡張されました。今後コマンドの置き換え、文書化3.1.1 シェル動作。 「bab」は後で実行される$(echo bab) 〜しないだろうエイリアスとして扱われます。

代わりに関数を試してください。

unalias bab
bab() { python "$@"; }
$(echo bab)       # launches a python shell

答え2

~からman bash

ニックネーム 単純なコマンドの最初の単語として使用すると、単語を文字列に置き換えることができます。

関連情報