bashで行われたPOSIXでの間接変数展開?


11

それは可能ですか、またはBashで行うことができるようにPOSIXで間接変数展開を行うためのエレガントなハックがありますか?

コンテキストについては、私は次のことをしようとしています:

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

編集:明確にするために、で始まるシェル変数にアクセスしたいと思いますmap_


5
再開に投票しました。Qは、ワイルドカード(map_*)に一致するすべての変数を間接的に取得する方法を知りたいと考えています。
slm

私の質問について不明確だったので驚いた:P
ダッシュ

4
もう一度開いてください。これはshVSの場合です-stackoverflow.com/a/5725402/1172302をbash参照してください。
Nikos Alexandris

そのため、stackoverflowや一部のstackexchangeサイトを好まない人もいます。
破線

回答:


6

ハックは使用すること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私が探していたものでした。
破線

ただし、これは完全なものではなく、任意のコマンドインジェクションの脆弱性です(がある環境で実行される場合などQUERYSTRING=$'\nmap_$(reboot)=x')。また、bashシェルの出力に関数のリストが含まれていることにも注意してくださいset(として実行していない場合sh)。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.