按照描述${!prefix*} ${!prefix@}
扩展为名称以前缀开头的变量的名称,由IFS特殊变量的>第一个字符分隔。当使用“@”并且扩展>出现在双引号内时,每个变量名称都会扩展为单独的单词。
在这里,我的问题是“我可以使用$ {!前缀*}列出脚本中所有声明的变量吗?”
在我的示例代码中
#!/bin/bash
VAR1="VAR1"
VAR2="VAR2"
NON_VAR="VAR3"
echo "${!VAR*}"
echo "${!*}"
echo "${!^*}"
RESULT======================
VAR1 VAR2
"NOTING_PRINTED"
"NOTING_PRINTED"
我预计它可以用来打印所有声明的变量
就像它可以成功打印所有“VAR *”变量一样,但不能。
我知道还有其他选项我可以选择列出所有声明的变量,但是
我想知道在这种语法下是否可行。
答案 0 :(得分:2)
您可以迭代变量名称的所有可能的第一个字符:
for ch in {a..z} {A..Z} _ ; do
eval s='${!'$ch'*}'
[[ $s ]] && echo $s
done
或者只是在没有参数的情况下致电set
。