我有如下代码:
read var9
echo 'option domain-name' '"'$var9'"'';' >>dhcpd.conf
我希望输出看起来像:
option domain-name "sr.lan";
但是编辑器中语法高亮显示的$var1
突出显示为好像是文字文本,而不是变量引用,如下图所示。
这怎么了?
这是我的脚本的图片:
答案 0 :(得分:1)
您可以尝试以下解决方案之一:
echo 'option domain-name "'"$var9"'";' >> dhcpd.conf
echo "option domain-name \"$var9\";" >> dhcpd.conf
printf 'option domain-name "%s";' "$var9" >> dhcpd.conf
但是,我宁愿建议使用预定义的模板(分隔的文件),并用sed
,perl
或mustache
替换相关的变量出现,而不是这样做类似于echo ... $var9 ... >> dhcpd.conf
。
例如,使用胡子的Bash实现mo:
# Create demo file
cat > demo.mo <<EOF
option routers {{var1}};
option domain-name "{{var9}}";
EOF
# Install mustache for Bash
curl -fsSL https://git.io/get-mo -o mo
# inspect the bash script "mo" so downloaded,
# then add the executable flag
chmod +x mo
# and put "mo" in your PATH, e.g.: sudo mv mo /usr/local/bin/
# Use mustache
var1="Démo_var_1" var9="Démo var 9" mo demo.mo > demo.txt
然后您获得:
demo.txt
option routers Démo_var_1;
option domain-name "Démo var 9";
PyPI中还有一个Python版本:pystache。
但是,当然,有许多提供类似功能的开源程序。
例如,如@CharlesDuffy所提到的,envsubst
程序也可以使用,仅依赖于gettext
,例如这些参考:
答案 1 :(得分:0)
就其价值而言,如果您的编辑器显示$var9
部分就像被引用一样,则似乎将引号解释为错误。您的行有四个不同的带引号的字符串,在下面标记。请注意,变量$var9
没有被引用。但是,您应该对变量加双引号,以避免出现word splitting问题以及文件名通配符意外扩展。
echo 'option domain-name' '"'$var9'"'';' >>dhcpd.conf
11111111111111111111-222-----333444
ErikMD's answer具有引号正确且可读性强的替代方法。