Bash
使用 shell 腳本解釋從字元串中讀取的變數
我有一個文本文件,它通常填充多行,我想用 while 循環“列印”。此文件中的文本包含變數 - 我的問題是,這些變數的解釋與包含儲存在腳本中的變數的類似測試字元串不同。是否也可以從我的外部文件中解釋這些變數,或者我是否必須事先解析它們等?
$LINE_INSIDE
和 和有什麼不一樣$LINE_OUTSIDE
?我嘗試了其他問題的一些建議,例如${!varialbe_name}
帶有引號的不同結構,但到目前為止沒有運氣。#!/bin/bash # color.sh BLUE='\033[1;34m' NC='\033[0m' # No Color LINE_INSIDE="${BLUE}Blue Text${NC}" echo -e ${LINE_INSIDE} while read LINE_OUTSIDE; do echo -e ${LINE_OUTSIDE} done < text_file
輸出:
附加資訊:我(確實)在我的輸入文本文件中也有不應執行的 shell 命令。只有變數應該被擴展。
把它寫成這樣可能更有意義:
BLUE=$'\033[1;34m' NC=$'\033[0m' # No Color eval "cat << EOF $(<text_file) EOF "
而不是使用
while read
循環(順便說一句,這不是閱讀行的正確語法)。當然,這意味著那裡的程式碼將被解釋。例如,其中的A
$(reboot)
會導致重新啟動,但這或多或少是您所要求的。這也假設
text_file
不包含EOF
一行。另一種只進行變數(環境變數)替換(而不是命令替換例如)的方法是使用 GNU
gettext
的envsubst
:BLUE=$'\033[1;34m' NC=$'\033[0m' # No Color export BLUE NC envsubst < text_file
或者只有這兩個變數被擴展:
BLUE=$'\033[1;34m' NC=$'\033[0m' # No Color export BLUE NC envsubst '$BLUE$NC' < text_file