我有一个包含以下内容的文本文件:
Hello \"${USER}\"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
现在我正在运行一个 bash 脚本,其中分配(并导出)了这些字符串。但是,当该脚本回显该文件时,它不会替换字符串。
... code ...
export COFFEE_COUNT="$(some code)" #${USER} is set by default
... code ...
t=$(wc -l < ${scriptdir}/COFFEE);
for ((l=1;l<t;l++));
do
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE);
done;
... code ...
猫也不工作
cat "${scriptdir}/COFFEE";
有办法让这项工作发挥作用吗?
所需输出:
Hello "username"!
Today you drank 3 coffees.
See you tomorrow!
答案1
bash 仅扩展其代码中的变量,而不扩展变量(或其他扩展)数据中的变量。硅代替
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)
你需要
eval echo \""$(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)"\"
答案2
当此处文档可以完成这项工作时,为什么要使用附加文件:
#!/bin/bash
export COFFEE_COUNT=$1 #${USER} is set by default
export USER=username
cat <<_EOT_
Hello "${USER}"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
_EOT_
执行时:
$ ./script 13
Hello "username"!
Today you drank 13 coffees.
See you tomorrow!