envsubst 可以用来替换给定变量(而不是文件)中的环境变量吗?

envsubst 可以用来替换给定变量(而不是文件)中的环境变量吗?

我知道我可以使用envsubst命令来替换文件内的环境变量并将其写入输出文件:

envsubst < input.txt > output.txt

但是,现在我只有一个变量,它不是一个文件。但我仍然需要替换其中的任何环境变量。

export original_text="Hello $name, please come here $date"
# I want to be able to replace $name and $date, in the RAM and not on disk and files
export $name="John"
export $date="tomorrow"
output=$(envsubst < $original_text) # this is a pseudo-command
echo $output
# prints => Hello John, please come here tomorrow

这可能吗?如何实现?

答案1

是的,您可以使用此处的字符串:<<< "$variable"

您的 original_text 必须是单引号,否则在创建时变量将被替换original_text

$ original_text='Hello $name, please come here $date'
$ export name="John"
$ export date="tomorrow"
$ envsubst <<< "$original_text"
Hello John, please come here tomorrow

当然,您可以像往常一样将其保存在变量中:

output=$(envsubst <<< "$original_text")

您也可以通过管道传输envsubst,例如:

$ printf '%s\n' "$var" | envsubst
Hello John, please come here tomorrow

相关内容