如何在Bash中不重新定义变量命令来修改PYTHONPATH路径?
Bash修改存储命令的变量的正确方法
首先,你遇到的bad substitution错误是因为参数替换语法错误:变量名前不需要再加$符号,正确的替换语法是${变量名//旧字符串/新字符串},而非${$变量名//...}。
另外需要纠正一个关键问题:你原本的变量定义EXPORT=$(eval "export PYTHONPATH=/path/to/package1:$PYTHONPATH")并没有存储命令本身——$()会捕获命令的执行输出,而export命令成功执行时没有任何标准输出,所以EXPORT变量实际是空值。如果你想把命令字符串存在变量里,应该用单引号赋值(避免$PYTHONPATH提前展开):
EXPORT='export PYTHONPATH=/path/to/package1:$PYTHONPATH'
接下来,修改这个变量里路径的正确方法:
方法1:转义路径中的/分隔符
因为Bash参数替换默认用/作为分隔符,所以路径里的/需要转义:
EXPORT="${EXPORT//\/path\/to\/package1/\/path\/to\/package2}"
方法2:更换替换分隔符
为了避免转义,你可以指定其他字符作为替换的分隔符(比如#),只需在替换模式前加上该字符即可:
EXPORT="${EXPORT//#\/path\/to\/package1/#\/path\/to\/package2}"
修改完成后,执行变量中存储的命令可以用:
eval "$EXPORT"
内容的提问来源于stack exchange,提问作者Shaun Han
相关产品推荐
相关产品推荐

