2

このコードは、配列の長さとインデックスを間接的に取得する例として、bash-hackers.org wiki ページで配列間接化の回避策として提供されています。

このStackoverflow questionにも記載されています。

なぜ機能するのかを具体的に理解したいと思いlocal -a 'xkeys=("${!'"$1"'[@]}")'ます。ここで何が起きてるの。等号の右側に 3 つの異なる文字列があることを理解しています。

  1. 'xkeys=("${!'
  2. 「$1」
  3. '[@]}")'

なぜそれが機能するのですか?

これはコードです:

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
}

ありがとう

4

2 に答える 2

1

${!"$1"}in という名前の変数をフェッチします$1${variable[@]}配列内のすべての要素に展開されますvariable。したがって、これは基本的に、 によって指定された配列を にコピー$1xkeysます。

于 2014-06-04T04:15:41.387 に答える