Bash

是否可以使用 shell 腳本列印變數內容的內容?(間接引用)

  • July 22, 2019

假設我已經聲明了以下變數:

$ var='$test'
$ test="my string"

如果我列印他們的內容,我會看到以下內容:

$ echo $var
$test

$ echo $test
my string

我想找到一種方法來列印內容的內容$var(即 的內容$test)。所以我嘗試執行以下操作:

$ echo $(echo $var)
$test

但是這裡的結果是$test而不是"my string"……是否可以使用bash列印變數內容的內容?

您可以使用 bash 的間接變數擴展來完成此操作(只要您可以$從參考變數中省略 ):

$ var=test
$ test="my string"
$ echo "$var"
test
$ echo "${!var}"
my string

3.5.3 Shell參數擴展

對於包含在其中的變數名稱var以您為前綴的情況,$可以使用eval

$ var='$test'
$ test="my string"
$ eval echo $var
my string

這裡會發生什麼:

  • bash 擴展$var為 value $test,產生一個eval echo $test命令;
  • eval計算echo $test表達式並產生所需的結果。

請注意,eval通常使用可能是危險的(取決於儲存在 中的內容var),因此最好避免使用它。間接擴展功能更適合您的情況(但您需要擺脫$登錄$test)。

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