Bash
回顯一個字元串,其中包含一個字元串
我有一個包含以下內容的文本文件:
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!