까다 롭습니다. 당신은 "내부"따옴표 이스케이프 손으로 작업을 수행 할 수 있습니다
$ 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")'
을하지만 어떻게 "프로그래밍"그것을 할? 다행히 배쉬는 문자열을 '탈출'하는 메커니즘을 가지고있다 : printf "%q"
:
$ declare -A arr=(["a'b"]=3 [foo]=bar)
$ declare -p arr
declare -A arr='(["a'\''b"]="3" [foo]="bar")'
$ key="a'b"
$ unset 'arr[$key]'
$ declare -p arr
declare -A arr='([foo]="bar")'
가 완료 :
$ 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")'
['unset arr [ "$ key"]'] (http://mywiki.wooledge.org/BashGuide/Practices#Quoting)? ** 편집 ** : 이것도 작동하지 않습니다 ... – anishsane
bash에서 버그처럼 보입니다 – Leon
음 ... 내 나쁜 ... 또한, 'arr ['$ x '] = 123; unset arr [ '$ x']''-bash : unset : [$ x] : 잘못된 배열의 첨자' – anishsane