Bash

在bash中對變數執行別名

  • September 29, 2021

我在我的 bash 腳本中遇到了這種奇怪的行為。

#!/bin/bash
V=a
alias $V="echo test"
echo $(a)                 #returns 'test'
echo $($V)                #returns ...'a: not found'

有沒有辦法用變數來模擬前一種行為?

只有當命令直接出現在程式碼中時,別名才會被擴展,而不需要任何擴展。編寫諸如\a, $V,$(echo a)等之類的內容會抑制別名查找。

此外,bash(與其他 shell 不同)預設情況下不會在腳本中擴展別名,因此a實際上不會bash 中執行別名。

使用函式而不是別名。您需要使用原始名稱來定義函式。

V=a
a () { echo test; }
"$V"     # prints test

(還有其他方法可以通過使用來做你想做的事情,但除非你確切地知道你在做什麼,否則eval不要使用。正確引用事情是很棘手的。)eval``eval

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