bash 在另一个变量中保留变量引用

bash 在另一个变量中保留变量引用

我的.bashrc 中有以下变量:

export UPRODUCT=productName
export U=/path/to/products/$UPRODUCT

因此输入 cd $U 将带我到 /path/to/products/productName。

我想做的是,在我的壳里

export UPRODUCT=otherProductName
cd $U

并转到 /path/to/products/otherProductName,无需重新定义 $U。这可能吗?

答案1

直接回答:不可以,不可能将未扩展的引用保存在变量中,当使用该变量时,该引用将被扩展。Shell 扩展在标记化之后立即发生,包括变量赋值,以及参数扩展本身不包括递归扩展步骤

编辑,凯文:但请注意,其他扩展可能发生在 shell 参数扩展之后(包括文件名扩展)。这不允许双重间接,但可用于扩展未加引号的文件名通配符。

使用页面上的其他答案之一来实现等效行为。

答案2

是的,有功能

cdu() { cd /path/to/products/$UPRODUCT ;}

您输入后cdu,目录中的内容会发生变化$U。我这样称呼它cdu,但您可以选择自己喜欢的名称。
问题是,当您export第一次进入时.bashrc,它会扩展当时已知的值。

答案3

将其添加到您的 ~/.bashrc:

alias mycd='export U=/path/to/products/$UPRODUCT; cd'

并以如下方式使用:

export UPRODUCT=otherProductName
mycd $U

答案4

如果你愿意使用eval (我希望你不是),那么你可以这样做:

export UPRODUCT=productName
export U=/path/to/products/\$UPRODUCT

export UPRODUCT=otherProductName
eval cd $U

注意变量定义\之前的。$U

相关内容