在 bash 中,声明一个依赖于当前变量内容的别名

在 bash 中,声明一个依赖于当前变量内容的别名

我想声明一个别名(在我的.bash_profile),当别名是用过的,而不是在定义时。例如,

alias goSomeWhere="cd $BASE/somewhere"

$BASE在定义别名时不设置,仅在使用时设置。但是,由于$BASE在定义别名时(登录时)评估,因此goSomeWhere别名被解释为cd /somewhere

我怎样才能延迟变量的评估直到别名被执行?

答案1

"用替换两者,'或者$用 替换前缀\

答案2

alias是内置命令,而不是关键字,它可能会使得 Bash 以不同于通常的方式解释该行的其余部分。并且通常双引号(或未加引号)的变量在调用命令(或内置命令)之前由 shell 扩展。在您的情况下就是这样。请注意,扩展不仅限于之后的部分=。我的意思是您可以这样做:

var1=alias
var2='foo=bar'
"$var1" "$var2"

它将有效地创建一个变成的别名foobar在您的定义中,您希望$BASE使用单引号,因此它不会被扩展。

任何别名替换文本文本。它纯粹是文本。正如你想goSomeWhere用文字替换

cd $BASE/某处

等等。不,你不想要上面的内容,你要下面:

cd "$BASE/somewhere"

你的定义应该是:

alias goSomeWhere='cd "$BASE/somewhere"'

参数扩展(变量扩展)和引号内的引号。定义别名时,变量是用单引号引起来的,但在别名扩展后(每次使用时都会发生这种情况),变量是用双引号引起来的。

相关内容