如何在不扩展通配符的情况下扩展bash变量中的变量?

时间:2013-04-02 15:23:54

标签: bash eval

我有一个包含这种字符串的变量:

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"

如何在不扩展通配符的情况下替换变量?

2 个答案:

答案 0 :(得分:6)

在bash中关闭globbing,然后启用它。

set -f 
var="$FOO/bar/baz*"
set +f

答案 1 :(得分:1)

只需删除引号:

var=$FOO/bar/baz/*

Glob不会在变量赋值的RHS上进行扩展。