bash'de olduğu gibi POSIX'te dolaylı değişken genişleme?


11

Bash'te yapılabileceği gibi POSIX'te dolaylı değişken genişleme yapmak mümkün mü yoksa zarif bir kesmek var mı?

Bağlam için aşağıdakileri yapmaya çalışıyorum:

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

EDIT: Açıklığa kavuşturmak için, ile başlayan kabuk değişkenlerine erişmek istiyorum map_.


5
Oy verildi reopen. Q, dolaylı yoldan, joker karakterle ( map_*) eşleşen tüm değişkenleri nasıl alacağını bilmek istiyor .
slm

Sorumla ilgili olarak belirsiz olduğuma şaşırdım: P
Dashed

4
Lütfen tekrar açın. Bu bir shVS vakasıdır bash- bkz. Stackoverflow.com/a/5725402/1172302 .
Nikos Alexandris

Bu yüzden bazı insanlar stackoverflow ve bazı stackexchange sitelerini sevmez.
Çizgili

Yanıtlar:


6

Kesmek kullanmaktır 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

Teşekkürler! setaradığım şey buydu.
Dashed

Bu kusursuz değildir ve keyfi bir komut enjeksiyon güvenlik açığıdır (sahip olduğu bir ortamda çalıştırıldığı gibi QUERYSTRING=$'\nmap_$(reboot)=x'). Ayrıca, bashkabuğun çıkışındaki işlevlerin listesini içerdiğine dikkat edin set(çalışmazken sh).
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.