我的.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