>dhcpd.conf 我希望输出如下: option domain-name -6ren">
gpt4 book ai didi

linux - 如何在 bash 中插入引号而不在其文字文本中进行变量扩展?

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:32 26 4
gpt4 key购买 nike

我有如下代码:

read var9
echo 'option domain-name' '"'$var9'"'';' >>dhcpd.conf

我希望输出如下:

option domain-name "sr.lan";

但我的编辑器中的语法突出显示显示 $var1 突出显示,就好像它是文字文本,而不是变量引用,如下图所示。

这有什么问题吗?

这是我的脚本的图片: My script

最佳答案

您可以尝试以下解决方案之一:

  • echo '选项域名 "'"$var9"'";' >> dhcpd.conf
  • echo "选项域名\"$var9\";">> dhcpd.conf
  • printf '选项域名“%s”;' “$var9”>> dhcpd.conf

但是,我宁愿建议使用预定义的模板(单独的文件)并将相关变量替换为 sedperlmustache ,而不是像 echo ... $var9 ... >> dhcpd.conf 这样的事情。

例如,使用 Mustache 的 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,请参见例如这些引用资料:

关于linux - 如何在 bash 中插入引号而不在其文字文本中进行变量扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com