The (e) flag is basically eval for parameter expansion. Using :-, an inline string is created which looks like $a1[key], where the $ is the escaped one, the a1 comes from $i, and \[key] is just added, escaping the [ so it's not used as array subscript of $i. Cheers, - V