我有一个包含某个变量的字符串,我想将该变量的值替换为字符串。现在我最好的是
#!/bin/bash
foo='$name; echo bar'
name="The name"
expanded="$(eval echo "$foo")"
echo "$expanded"
其中有一些明显的缺陷:打印
The name
bar
虽然我想要打印
The name; echo bar
答案 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