9

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

var='$FOO/bar/baz*'

我想用它的内容替换变量 $FOO 。但是,当我这样做时

var=$(eval "echo $var")

变量被替换,但星号也被替换,因此var现在包含我的文件系统中的所有可能匹配项(就像我在 shell 中按下制表符一样)。例如,如果 $FOO 包含 /home,var将包含"/home/bar/baz1.sh /home/bar/baz2.sh /home/bar/baz.conf"

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

4

2 回答 2

10

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

set -f 
var="$FOO/bar/baz*"
set +f
于 2013-04-02T15:33:39.893 回答
1

只需删除引号:

var=$FOO/bar/baz/*

Glob 不会在变量赋值的 RHS 上展开。

于 2013-04-02T15:50:53.570 回答