提问人:Shaun Han 提问时间:10/27/2023 最后编辑:Shaun Han 更新时间:10/27/2023 访问量:46
如何在不重新定义的情况下修改 bash 中的变量命令?
How to modify a variable command in bash without redefining it?
问:
假设我有一个变量命令,它被定义为类似$EXPORT
EXPORT=$(eval "export PYTHONPATH=/path/to/package1:$PYTHONPATH")
但是,我希望该命令将新的 package2 而不是 package1 导出到 。请注意,我想通过修改当前的 $EXPORT
变量而不是重新定义它来做到这一点。我尝试的是将字符串替换为:$PYTHONPATH
"/path/to/package1"
"/path/to/package2"
echo ${$EXPORT//"/path/to/package1"/"/path/to/package2"}
但我收到“糟糕的替换”错误。
那么在 bash 中修改变量命令的正确方法是什么呢?
答:
2赞
Ed Morton
10/27/2023
#1
不要将代码存储在变量中,变量用于存储数据,函数用于存储代码。请参见 https://mywiki.wooledge.org/BashFAQ/050。
我想你可能想要这个(未经测试):
do_export() { export PYTHONPATH="${1:-/path/to/package1}:$PYTHONPATH"; }
mycmd() { ls "${1:-./}"; )
然后,您将将其作为 prepend 而不是 to 运行,例如在父目录上运行。do_export '/path/to/package2'
package2
package1
PYTHONPATH
mycmd ..
ls
上一个:如何更新应随迭代而变化的变量?
评论
export
不打印任何内容。你认为你要分配给什么?$EXPORT
EXPORT='export "PYTHONPATH=/path/to/package1:$PYTHONPATH"
eval "$EXPORT"'
/
/path/to/package1
/path/to/package2
mycmd=$(eval "ls ./")
ls
echo ${$mycmd//".\/"/"..\/"}
bad substitution
mycmd=$(eval "ls ./")
eval "ls ./"
mycmd
eval
"ls ./"
mycmd
eval $mycmd
$mycmd
eval $mycmd