我需要在 shell 中有一个非常基本的模板系统才能将 Windows 安装程序移植到 linux。所以我不能改变模板变量的语法。
我想采用特定的环境变量(以 $ENV_PREFIX 开头)并构建一个 sed 形式的脚本s/@@@${TEMPLATE_VARIABLE}@@@/$VALUE_OF_ENVIRONMENT_VARIABLE/
。
$TEMPLATE_VARIABLE 是去掉了 $ENV_PREFIX 的环境变量的名称。
#!/usr/bin/env sh # no bashisms please!
TEMPLATE_FILE=$1
ENV_PREFIX="DMTMPL_"
SED_SCRIPT=""
OIFS="$IFS"
IFS=$'\012'
for VAR in "$(env | grep "^${ENV_PREFIX}")"
do
VARIABLE=$(echo $VAR | cut -d= -f1 | cut -d_ -f2-)
SED_SCRIPT="${SED_SCRIPT}\ns/${VARIABLE}/${???}/g"
done
echo ${SED_SCRIPT}
# invoke sed with $SED_SCRIPT on $TEMPLATE_FILE
现在我遇到了这个脚本的各种问题:
- 我尝试这样做
env --null
,但无法将其与以下 grep 结合使用。 - for 循环不会在每个循环中准确处理一个环境变量
- 我没有设法将 $SED_SCRIPT 与换行符很好地分开
- 当变量名存储在另一个变量中时,如何访问变量的值?这就是我需要把 ??? 在脚本中。
我以为我会为此编写一个快速的 shell 脚本,但现在我记得为什么我讨厌 shell 脚本...... :-(
这些问题似乎回答了我的部分问题: