【问题标题】:Bash: Echo nested variableBash:回声嵌套变量
【发布时间】:2016-02-28 15:06:17
【问题描述】:

我正在处理一个我已经分叉的 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 选项周围的引号使嵌套变得困难。

有人有更好的方法吗?

在问这个之前我已经尝试了很多并搜索了嵌套。

谢谢。

【问题讨论】:

  • "nesting" 是错误的搜索词——没有任何嵌套;引号结束并被不同的引用样式替换——缺少命令替换(这里不相关),它们不嵌套。相比之下,“单引号内的 bash 回显变量”提供了许多直接示例。

标签: bash echo openvpn


【解决方案1】:

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

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

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

【讨论】:

  • 这很棒而且很有效。非常感谢。我要去测试 vpn 安装程序。
猜你喜欢
  • 2014-03-04
  • 2014-08-24
  • 1970-01-01
  • 2022-01-21
  • 2021-03-14
  • 1970-01-01
  • 2017-10-10
  • 2015-11-09
  • 1970-01-01
相关资源
最近更新 更多