在字符串中执行变量替换

时间:2015-04-01 16:10:34

标签: bash

我有一个包含某个变量的字符串,我想将该变量的值替换为字符串。现在我最好的是

#!/bin/bash

foo='$name; echo bar'
name="The    name"
expanded="$(eval echo "$foo")"
echo "$expanded"

其中有一些明显的缺陷:打印

The name
bar

虽然我想要打印

The    name; echo bar

3 个答案:

答案 0 :(得分:1)

不完全确定您要尝试做什么但是这样做并且您没有(也可能不想)使用eval

 name="The    name"
 foo="$name; echo bar"
 echo "$foo

打印

The    name; echo bar

答案 1 :(得分:1)

而不是eval你可以用bash的字符串替换来匹配bash的正则表达式:

foo='$name; echo bar'
name="The    name"
[[ "$foo" =~ \$([[:alnum:]]+) ]] && s="${!BASH_REMATCH[1]}" &&
  expanded="${foo/\$${BASH_REMATCH[1]}/$s}"

echo "$expanded"
The    name; echo bar

答案 2 :(得分:0)

你可以这样做:

#!/bin/bash

name="The    '     \" name"
foo="$name; echo bar"
expanded=$(eval 'echo "$foo"')
echo "$expanded"

输出:

The    '     " name; echo bar