在使用脚本时,大多数用户都会使用环境变量,但有时他们会使用有风险的变量。
所以如果要替换环境变量,可以使用envsubst命令。
在 Linux 上使用 envsubst 命令替换环境变量
envsubst 命令用于获取环境变量的替代品,这就是它的名字所暗示的。
但它不会改变你的变量目录。 首先,它将寻找变量模式(例如 $VARIABLE
或者 [$VARIABLE]
).
然后它将找到的变量替换为指定的 bash 多变的。
?envsubst 命令只会识别导出的变量。
要使用 envsubst 替换环境变量,您必须遵循给定的命令结构:
envsubst [OPTION] [SHELL-FORMAT]
现在,让我们看看如何更改环境变量。
为此,我将使用一个名为 confidential.txt
包含:
A sample file containg password and username!
And should not be shared by any means.
My loging credentials are:
username=$USERNAME
password=$PASSWORD
现在,为两者都有替代值 $USERNAME
和 $PASSWORD
,首先,我将为它们创建一个导出变量:
export USERNAME=abhiman
export PASSWORD=strongphrase
完成导出变量值后,您可以为您创建的文件调用 envsubst 命令:
envsubst < confidential.txt
如您所见,值已成功更改!!
同样,您可以使用 unset 命令取消设置这些变量。 让我告诉你怎么做。
首先,取消设置您使用导出命令指定的变量。
就我而言,那些是, USERNAME
和 PASSWORD
:
unset USERNAME PASSWORD
现在,如果你运行 envsubst
再次命令,它会导致空格:

如果你对它是如何发生的感到好奇,让我提醒你一些我之前提到的事情。
envsubst 命令仅适用于导出的变量,当我使用 unset 命令时,值为空。
和 当 envsubst 命令找不到要替换的值时,它将导致出现空格。
将输出重定向到特定文件
有一个终端的输出目录并不总是最好的做事方式,在这种情况下,您可以将标准输出重定向到文件。
要将输出重定向到文件,您必须使用 >
重定向符号。
为了 example,在这里,我将输出重定向到名为 Output.txt
:
envsubst < confidential.txt > Output.txt

使用带有 SHELL-FORMAT 的 envsubst 命令替换特定变量
因此,假设您已经导出了多个环境变量,但您只想替换其中的几个。
在这种情况下,您可以使用 SHELL-FORMAT。
语法非常灵活,您需要做的就是在 ''
您可以通过多种方式使用它:
它可以像这样使用:
envsubst '$variable' > file
或者您可以像这样附加多个变量:
envsubst '$variable1 $variable1 $variable3' > file
您甚至可以附加基本文本以便更好地理解:
envsubst 'subsitute the $variable1 and $variable2' > file
相当灵活。 正确的?
现在,为了这个 example,我将使用一个名为 Substitute.txt
其中包含以下内容:
Hello, My name is $USER.
And these are login credentials for $SERVICE:
username=$USERNAME
password=$PASSWORD
Not meant for public use!
接下来,我将导出上述文件中使用的每个变量的值:
export USER=sagar export SERVICE=AWS export USERNAME=LHB export PASSWORD=randomphrase
在不替换任何特定变量的情况下,它应该会得到以下输出:

所以比方说,我只想要的值 $USER
和 $SERVICE
反映在输出中,所以我将使用以下内容:
envsubst '$USER $SERVICE' < Substitute.txt

如您所见,它显示了以下值 $USER
和 $SERVICE
而离开的 $USERNAME
和 $PASSWORD
事实上。
一种处理私人信息的巧妙方法。 不是吗?
喜欢玩变量? 我们有更多
如果您是一名开发人员并且喜欢使用环境变量,那么您可以通过以下方式了解每个变量的值:
或者,如果您很想知道在 bash,这是你如何做的:
我希望这篇文章对您有所帮助,如果您对本指南或任何其他指南有任何疑问,或者只是想让我涵盖任何特定主题,请在评论中告诉我。