用实际值替换文件中的 shell 个变量

Replace shell variables in a file with their actual values

是否可以将 shell 文件中定义的变量插入到从另一个文件读取的字符串中? (在此示例中,它只插入 1 个变量,但我需要很多)

例如有文件 example.txt

Hello $WORLD

和脚本文件

#!/bin/sh
WORLD=world!
FILE_STRING=$(cat example.txt)
echo $FILE_STRING

运行这个脚本我有

Hello $WORLD

但我想要

Hello world!

我想最简单的选择是在回显之前使用“eval”。

对于脚本文件:

#!/bin/sh
WORLD=world!
FILE_STRING=$(cat example.txt)
eval echo $FILE_STRING

如果你想了解更多关于eval的知识,可以看这里: https://www.tutorialspoint.com/unix_commands/eval.htm https://linuxhint.com/bash_eval_command/

您可以使用 GNU gettext-runtime 中的 envsubst 来动态替换文件中的变量值。

WORLD=world! envsubst < example.txt

或者更简洁,按要替换的名称引用变量,

WORLD=world! envsubst '$WORLD' < example.txt

并使用命令替换将结果存储在变量中 $(..)

FILE_STRING="$(WORLD=world! envsubst '$WORLD' < example.txt)"

作为更好的做法,始终使用小写变量名称来引用用户定义的变量,这样它们就不会不会被误解为环境变量。