2015-09-09 27 views
0

我有以下腳本:不能反引號中使用別名bash腳本里面

for i in 1 2 3 
do 
alias echo${i}="echo ${i}" 
alias aliastest${i}="echo aliastest `echo${i}`" 
done 

執行它之後,我期望有在名稱aliastest1,aliastest2,aliastest3 3別名。

但是我越來越:

./test.sh: line 5: echo1: command not found 
./test.sh: line 5: echo2: command not found 
./test.sh: line 5: echo3: command not found 

注意,試圖從命令行執行ECHO1,ECHO2,echo3的時候,它的工作如預期。

我在做什麼錯?

+1

別名在'bash'開始時有點奇怪;你應該使用一個shell函數。你的*實際*用例是什麼? (這只是一個演示,或者是一些別名的角落案例的探索。無論哪種方式,如果你可以使用shell函數,並不值得深入研究。) – chepner

+0

顯然它只是一個簡單的現實世界問題,只是讓它更容易在這裏發佈。我接受了你的建議並轉向了功能。謝謝。 – Yair

回答

1

默認情況下,只對交互式shell啓用別名擴展。您需要添加

shopt -s expand_aliases 

到腳本的開頭。

很可能無論您想要定義什麼別名,都應該將其定義爲shell函數。

+0

這是事實,但不是問題。問題在於嵌入的backtick命令由於雙引號而在別名分配時正在進行評估。 –

+0

謝謝。添加了這一行,仍然是一樣的。 – Yair

+0

@EtanReisner Hm。儘管如此,'echo1'仍應該在這個時候定義。 'echo $(別名)'會顯示定義。有一個錯誤或者一些微妙的東西,我忽略了alias'聲明的工作原理 – chepner