Bash

回顯一個字元串,其中包含一個字元串

  • January 7, 2018

我有一個包含以下內容的文本文件:

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!

bash 僅擴展其程式碼中的變數,而不擴展變數(或其他擴展)數據中的變數。Si 代替

echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)

你需要

eval echo \""$(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)"\"

當 here-doc 可以完成這項工作時,為什麼還要使用附加文件:

#!/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!

引用自:https://unix.stackexchange.com/questions/415268