2017-10-06 35 views
2

以下描述${!prefix*} ${[email protected]}

bash的手動擴展到的變量,其名稱開頭的前綴,由IFS特殊變量>第一個字符分隔的名字。當使用'@'且擴展>出現在雙引號內時,每個變量名稱將擴展爲單獨的單詞。

這裏,我的問題是「我可以使用$ {!前綴*}列出腳本中的所有聲明變量?」

在我的例子代碼

#!/bin/bash 

VAR1="VAR1" 
VAR2="VAR2" 
NON_VAR="VAR3" 

echo "${!VAR*}" 
echo "${!*}" 
echo "${!^*}" 

RESULT====================== 
VAR1 VAR2 
"NOTING_PRINTED" 
"NOTING_PRINTED" 

我希望它可以用來打印所有聲明的變量

喜歡,因爲它可以成功地打印所有「VAR *」的變量,但不能。

我知道有,我可以選擇列出所有聲明的變量其他的選擇,但

我想知道如果這句法下是可能的。

+0

顯然不是。我也試過$ {![abc] *}和$ {![^!] *}。沒有運氣。 –

+2

'eval echo'$ {!'{{a..z},{A..Z},_}'*}'' – 123

回答

2

可以遍歷變量名的所有可能的第一字符:

for ch in {a..z} {A..Z} _ ; do 
    eval s='${!'$ch'*}' 
    [[ $s ]] && echo $s 
done 

,還是直接致電set不帶參數。

相關問題