我需要用环境中存在的vars替换字符串。
例如,我的环境中现在有以下vars:
export APP_NAME=teste
export DB_DATABASE=dbname
export DB_USER=username
然后,我需要用这些变量中的值替换一个字符串,例如:
echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" | sed -E "s/b(w+)b=(1)/1=`echo \${\2}`/g"
然后我期待的最终结果:
APP_NAME=teste; DB_DATABASE=dbname; DB_USER=username;
但我得到的一切都是:
APP_NAME=${APP_NAME}
DB_DATABASE=${DB_DATABASE}
DB_USER=${DB_USER}
使用envsubst
:
echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" | sed 's/=/="$/g;s/;/";/g' | envsubst
输出:
APP_NAME="测试";DB_DATABASE="数据库名称";DB_USER="用户名">
参见:man envsubst
使用任何POSIX awk:
$ echo "APP_NAME=APP_NAME; DB_DATABASE=DB_DATABASE; DB_USER=DB_USER;" |
awk 'BEGIN{RS=ORS=";"; FS=OFS="="} /=/{$2=ENVIRON[$2]; print}'
APP_NAME=teste; DB_DATABASE=dbname; DB_USER=username;