Bash

Bash:shell插值中無法辨識的別名

  • January 20, 2022
~$ 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.
>>> 

我還是想知道為什麼

別名在命令替換之前得到擴展,記錄在3.1.1 Shell Operation中。之後執行的“bab”$(echo bab) 將不會作為別名處理。

嘗試改用函式:

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

man bash

當字元串用作簡單命令的第一個單詞時,別名允許將字元串替換為單詞。

引用自:https://unix.stackexchange.com/questions/687211