Shell 基于字符串的ENVSUT
我的文本文件中有以下两行Shell 基于字符串的ENVSUT,shell,text,environment-variables,Shell,Text,Environment Variables,我的文本文件中有以下两行 $MyEnv someText$MyEnv 我想使用envsubt只替换第二个出现的MyEnv变量。如何使用字符串“someText”来区分变量的第一次和第二次出现以及env变量中的替换 因此envsubstfile2 file 2 $MyEnv someTextValueofMyEnv 这是怎么可能的以下代码将替换输入第二行上的所有环境变量。请求的命令是唯一使用的非内置命令 L=0 while read line; do L=$((L+1)) if [ $
$MyEnv
someText$MyEnv
我想使用envsubt只替换第二个出现的MyEnv变量。如何使用字符串“someText”来区分变量的第一次和第二次出现以及env变量中的替换
因此envsubstfile2
file 2
$MyEnv
someTextValueofMyEnv
这是怎么可能的以下代码将替换输入第二行上的所有环境变量。请求的命令是唯一使用的非内置命令
L=0
while read line; do
L=$((L+1))
if [ $L = 2 ]; then
echo "$line" |envsubst
else
echo "$line"
fi
done < file1 > file2
注意:envsubt
将仅替换导出的变量。envsubst
命令不可移植;它是的一部分,不是或(LSB)的一部分
要完全可移植(并且完全使用sh内置软件!),您需要使用eval
,如果不进行大量额外检查,这是不安全的
while read line; do
# $line contains the string 'someText$MyEnv'
# (literally: $line does not match itself when removing that string)
if [ "$line" != "${line#*someText\$MyEnv}" ]; then
echo "$line" |envsubst
else
echo "$line"
fi
done < file1 > file2