Tricky You can do this manually by avoiding the "inner" single quote:
$ declare -A arr=(["a'b"]=3 [foo]=bar) $ key="a'b" $ unset "arr[$key]" bash: unset: `arr[a'b]': not a valid identifier $ unset "arr[a\'b]" $ declare -p arr declare -A arr='([foo]="bar" )'
But how to do it "programmatically"? Fortunately, bash has a line escape mechanism: printf "%q" :
$ declare -A arr=(["a'b"]=3 [foo]=bar) $ echo "$key" a'b $ printf "%q" "$key" a\'b $ unset "arr[$(printf "%q" "$key")]" $ declare -p arr declare -A arr='([foo]="bar" )'
glenn jackman
source share