在bash中完成POSIX中的间接变量扩展?


11

有可能吗,或者有一些不错的技巧可以像在Bash中一样在POSIX中进行间接变量扩展?

对于上下文,我正在尝试执行以下操作:

for key in ${!map_*}
do
    # do something
done

编辑:澄清一下,我想访问以开头的shell变量map_


5
投票重新开放。Q想要知道如何间接获得所有与通配符(map_*)相匹配的变量。
slm

我很惊讶我对我的问题不清楚:P
虚线

4
请重新打开。这是shVS 的情况bash-请参阅stackoverflow.com/a/5725402/1172302
Nikos Alexandris

因此,这就是为什么有些人不喜欢stackoverflow和某些stackexchange网站的原因。
破灭了

Answers:


6

该hack是使用eval

aaa=1
aab=2
aac=3

eval_like() {
    pattern=$1
    vars=`set |grep "^$pattern.*=" | cut -f 1 -d '='`
    for v in $vars; do
        eval vval="\$$v"
        echo $vval
    done
}   

for i in `eval_like aa`; do
    echo $i
done

谢谢!set是我一直在寻找的东西。
破空2014年

但这并不是万无一失的,而是一个任意的命令注入漏洞(例如在具有的环境中运行时QUERYSTRING=$'\nmap_$(reboot)=x')。还要注意,bashshell的输出中包含函数列表set(当未以形式运行时sh)。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.