Bash:Echo嵌套变量

时间:2016-02-28 15:06:18

标签: bash echo openvpn

我正在处理我已经分叉的vpn脚本,我想添加一个对话选项,以便用空格分隔用户输入,然后用一些嵌套设置文本将输入回显到vpn server.conf文件。

我不是程序员,但我真的很喜欢bash,这让我疯狂。

脚本部分

他们是一样的。

https://paste.ee/r/FKRnv

http://pastebin.com/raw/U0tSNaCP

底部两行仅用于在测试时回显结果。

现在,我遇到的问题就是这个部分:

echo 'push "dhcp-option DNS $(echo $i)"'  >> ./server.conf;

我还尝试了以下内容以及带有引号的变体:

echo 'push "dhcp-option DNS $i"'  >> ./server.conf;

但这不起作用,因为它将$i作为文本回应。 无论我如何尝试嵌套$i变量,bash只会将其作为文本回应,而不是用户的输入。

openvpn的配置示例:

openvpn.net/index.php/open-source/documentation/howto.html#examples

;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"

所以最后,我想要的是这样的结果:

push "dhcp-option DNS 1.2.3.4"
push "dhcp-option DNS 5.6.7.8"

其中1.2.3.4和5.6.7.8等是用户输入。但是,dhcp-option周围的引号使嵌套变得困难。

有人有更好的方法吗?

在问这个问题之前,我已经尝试了许多人并寻找了嵌套。

谢谢。

1 个答案:

答案 0 :(得分:2)

单引号禁止变量扩展和命令替换。除少数例外情况外,单引号中的字符只是普通字符。

但是,您可以将字符串连接在一起:

echo 'push "dhcp-option DNS '"$i"'"' >> ./server.conf
# ..........................ab..bccc
# a => close the opening single quote
# b => quote the expansion of $i
# c => the closing literal double quote