Bash magic - asszociatív tömb

Minap ebbe futottam a stackoverflow-n
https://stackoverflow.com/questions/3112687/how-to-iterate-over-associa…
foreach(){
arr="$(declare -p $1)" ; eval "declare -A f="${arr#*=};
for i in ${!f[@]}; do $2 "$i" "${f[$i]}"; done
}
$ bar(){ echo "$1 -> $2"; }
$ declare -A foo["flap"]="three four" foo["flop"]="one two"
$ foreach foo bar
flap -> three four
flop -> one two

valaki eltudja magyarázni az f="${arr#*=} változót?

Hozzászólások

Rosszul mondatelemzel:

eval "declare -A f="$blablahblah - azaz hozz letre egy "f" nevezetu asszociativ tombot a blablablah osszes elemevel. Hogy mondjuk minek ide az az eval meg a tobbi nonyolult korites az eleg erdekes, mivel sokkal egyszerubb amit felette irtak.

Mondjuk a zsh-m meg se eszi :D

Nezz utana az eval-nak.

Nézz bele a man bash azon szakaszába, ahol ez van: ${parameter#word}

Hátha úgy érthetőbbé válik.

Létrehoz egy f nevű asszociatív tömböt úgy, hogy az $arr változó tartalmát hajtja végre, de előtte a string elejétől az "="-ig töröl mindent.

$arr tartalma eredetileg:
declare -A foo='([flap]="three four" [flop]="one two" )'

${arr#*=}
'([flap]="three four" [flop]="one two" )'

Így érthetőbb?