此代码在bash-hackers.org wiki 页面上作为数组间接的解决方法给出,作为间接获取数组长度和索引的示例。
这个Stackoverflow 问题中也提到了这一点。
我想具体了解为什么local -a 'xkeys=("${!'"$1"'[@]}")'
有效。这里发生了什么。我知道等号右侧有三个不同的字符串:
- '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
}
谢谢