Bash:变量名称扩展($ {!prefix *})可以在脚本中列出所有声明的变量吗?

时间:2017-10-06 14:18:44

标签: bash

按照描述${!prefix*} ${!prefix@}

的bash手册
  

扩展为名称以前缀开头的变量的名称,由IFS特殊变量的>第一个字符分隔。当使用“@”并且扩展>出现在双引号内时,每个变量名称都会扩展为单独的单词。

在这里,我的问题是“我可以使用$ {!前缀*}列出脚本中所有声明的变量吗?”

在我的示例代码中

#!/bin/bash

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

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

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

我预计它可以用来打印所有声明的变量

就像它可以成功打印所有“VAR *”变量一样,但不能。

我知道还有其他选项我可以选择列出所有声明的变量,但是

我想知道在这种语法下是否可行。

1 个答案:

答案 0 :(得分:2)

您可以迭代变量名称的所有可能的第一个字符:

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

或者只是在没有参数的情况下致电set