2015-09-09 25 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