有没有一种简单的方法来替换/评估文件中的环境变量?假设我有一个config.xml
包含以下内容的文件:
<property>
<name>instanceId</name>
<value>$INSTANCE_ID</value>
</property>
<property>
<name>rootPath</name>
<value>/services/$SERVICE_NAME</value>
</property>
Run Code Online (Sandbox Code Playgroud)
...等等。我想$INSTANCE_ID
用INSTANCE_ID
环境变量的值替换文件$SERVICE_NAME
中的SERVICE_NAME
env var的值。我不会先验地知道需要哪些环境变量(或者,如果有人向配置文件添加了新的环境变量,我不想更新脚本)。谢谢!
scripting shell-script text-processing environment-variables
我知道envsubst
替换输入中声明的环境变量。
$ echo 'Hello $USER' | envsubst
Hello myusername
Run Code Online (Sandbox Code Playgroud)
我想要的是一种替换环境变量的方法,如果它以其他方式存在envsusbst
(或任何其他命令),则将变量字符串保持原样。我得到的是:
$ echo 'Hello $USER $UNDEFINED_VARIABLE' | envsubst
Hello myusername
Run Code Online (Sandbox Code Playgroud)
我想要的是:
$ echo 'Hello $USER $UNDEFINED_VARIABLE' | somecommand
Hello myusername $UNDEFINED_VARIABLE
Run Code Online (Sandbox Code Playgroud) 我想使用 bash 脚本(而不是 dom )创建简单的 xml 文件
但是当我在行中设置值时, echo打印 $lorem 字而不是 val
lorem = 哈哈
echo '<root><foo a="b">$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML
Run Code Online (Sandbox Code Playgroud)
我也试试这个
echo '<root><foo a="b">\$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML
echo '<root><foo a="b">"$lorem"</foo><bar value="ipsum" /></root>' >> $MY_XML
echo '<root><foo a="b">\"$lorem\"</foo><bar value="ipsum" /></root>' >> $MY_XML
Run Code Online (Sandbox Code Playgroud)
但所有这些都准确地打印了行而不是 val
请建议如何打印 val $lorem ?如下例
<root><foo a="b">LOL</foo><bar value="ipsum" /></root>
Run Code Online (Sandbox Code Playgroud)