echo 一个字符串,里面有一个字符串

echo 一个字符串,里面有一个字符串

我有一个包含以下内容的文本文件:

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!

相关内容