我有一个变量包含了这样一种字符串:
var='$FOO/bar/baz*'
我希望用它的内容替换变量$FOO。但当我这样做时
var=$(eval "echo $var")
变量被替换了,但星号也被替换了,因此
var 现在包含文件系统中所有可能的匹配项(就像我在shell中按tab键一样)。例如,如果$FOO包含/home,则 var 将包含“/home/bar/baz1.sh /home/bar/baz2.sh /home/bar/baz.conf”
如何在不扩展通配符的情况下替换变量?
set -f
可以实现。如果你的目标是进行安全的模板评估...呃,对于bash中的模板来说,并没有什么是“安全”的,因为你无法禁用命令替换;也就是说,一个包含$(rm -rf "$HOME")
的模板将会执行该命令。 - Charles Duffy