我想声明一个别名(在我的.bash_profile
),当别名是用过的,而不是在定义时。例如,
alias goSomeWhere="cd $BASE/somewhere"
$BASE
在定义别名时不设置,仅在使用时设置。但是,由于$BASE
在定义别名时(登录时)评估,因此goSomeWhere
别名被解释为cd /somewhere
。
我怎样才能延迟变量的评估直到别名被执行?
答案1
"
用替换两者,'
或者$
用 替换前缀\
。
答案2
alias
是内置命令,而不是关键字,它可能会使得 Bash 以不同于通常的方式解释该行的其余部分。并且通常双引号(或未加引号)的变量在调用命令(或内置命令)之前由 shell 扩展。在您的情况下就是这样。请注意,扩展不仅限于之后的部分=
。我的意思是您可以这样做:
var1=alias
var2='foo=bar'
"$var1" "$var2"
它将有效地创建一个变成的别名foo
。bar
在您的定义中,您希望$BASE
使用单引号,因此它不会被扩展。
任何别名替换文本和文本。它纯粹是文本。正如你想goSomeWhere
用文字替换
cd $BASE/某处
等等。不,你不想要上面的内容,你要下面:
cd "$BASE/somewhere"
你的定义应该是:
alias goSomeWhere='cd "$BASE/somewhere"'
看参数扩展(变量扩展)和引号内的引号。定义别名时,变量是用单引号引起来的,但在别名扩展后(每次使用时都会发生这种情况),变量是用双引号引起来的。