このコードは、配列の長さとインデックスを間接的に取得する例として、bash-hackers.org wiki ページで配列間接化の回避策として提供されています。
このStackoverflow questionにも記載されています。
なぜ機能するのかを具体的に理解したいと思いlocal -a 'xkeys=("${!'"$1"'[@]}")'
ます。ここで何が起きてるの。等号の右側に 3 つの異なる文字列があることを理解しています。
- 'xkeys=("${!'
- 「$1」
- '[@]}")'
なぜそれが機能するのですか?
これはコードです:
isSubset() {
local -a 'xkeys=("${!'"$1"'[@]}")' 'ykeys=("${!'"$2"'[@]}")'
set -- "${@/%/[key]}"
(( ${#xkeys[@]} <= ${#ykeys[@]} )) || return 1
local key
for key in "${xkeys[@]}"; do
[[ ${!2+_} && ${!1} == ${!2} ]] || return 1
done
}
ありがとう