bash에서와 같이 POSIX의 간접 ​​변수 확장?


11

Bash에서와 같이 POSIX에서 간접 변수 확장을 수행하는 것이 가능합니까?

컨텍스트를 위해 다음을 수행하려고합니다.

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

편집 : 명확히하기 위해로 시작하는 쉘 변수에 액세스하고 싶습니다 map_.


5
다시 열기로 투표 Q는 와일드 카드 ( map_*) 와 일치하는 모든 변수를 간접적으로 얻는 방법을 알고 싶어합니다 .
slm

나는 내 질문과 관련하여 명확하지 않다는 것에 놀랐다. : P
Dashed

4
다시여십시오. shVS 의 경우입니다 . stackoverflow.com/a/5725402/1172302를bash 참조하십시오 .
Nikos Alexandris

그렇기 때문에 일부 사람들은 스택 오버 플로우와 일부 스택 교환 사이트를 좋아하지 않습니다.
Dashed

답변:


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내가 찾던 것이 었습니다.
Dashed

그것은 완전하지는 않지만 임의의 명령 주입 취약점입니다 (예를 들어 환경에서 실행될 때 QUERYSTRING=$'\nmap_$(reboot)=x'). 또한 bash셸은 set(로 실행되지 않을 때) 출력에 함수 목록을 포함합니다 sh.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.