将文件中的shell变量替换为其实际值



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

。文件example.txt

Hello $WORLD

和脚本文件

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

运行这个脚本,我得到

Hello $WORLD

但是我想要

Hello world!

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

WORLD=world! envsubst < example.txt

或者更简洁地说,通过您想要替换的名称引用变量,

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

并使用命令替换$(..)

将结果存储在一个变量中
FILE_STRING="$(WORLD=world! envsubst '$WORLD' < example.txt)"

作为一种更好的实践,总是使用小写的变量名来引用用户定义的变量,这样它们就不会被误解为环境变量。

我想最简单的选择是使用"eval">

脚本文件:

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

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

最新更新