私はGentooのebuildがどのように作成されるのかを調べていて、次のコードを見つけました:
_VIM_PLUGIN_ALLOWED_DIRS=(
after autoload colors compiler doc ftdetect ftplugin indent keymap
macros plugin spell syntax
)
local d
for d in "${_VIM_PLUGIN_ALLOWED_DIRS[@]}" "${@}"; do
[[ -d "${d}" ]] || continue
doins -r "${d}"
done
私が知る限り、_VIM_PLUGIN_ALLOWED_DIRS
これはリストです。d
ローカル変数です。
私が理解していない[@]
ことは_VIM_PLUGIN_ALLOWED_DIRS[@]
。通常、私はそれを省略し[@]
て値をd
繰り返します。_VIM_PLUGIN_ALLOWED_DIRS
何をしていますか?その目的は何ですか?
見たこともなく、次に何をするのか[@]
わかりません。${@}
PS:doins
他の場所で定義された外部関数です。
事前にありがとう
答え1
通常、[@] を省略し、_VIM_PLUGIN_ALLOWED_DIRS 値を繰り返します。
Bashでも使用できるkshスタイルの配列では、インデックスなしで配列を参照すると、インデックス内の要素のみが提供されます0
。これは、インデックスを使用して配列を参照すると、すべての(null以外の)要素が提供されるzshとは異なります。
特別な索引付けは、@
配列内のすべての要素を固有フィールドにインポートするために使用されます。$@
すべての位置パラメータ(スクリプトまたは関数のパラメータ)に同様に拡張されます。
例えば
arr=(foo "bar doo")
printf "<%s> " "$arr"; echo # '<foo>'
printf "<%s> " "${arr[@]}"; echo # '<foo> <bar doo>'
どちらの場合も、値を必然的に混乱させる単語セパレータとワイルドカードを引用して"${arr[@]}"
避ける必要があります。"$@"
望むより: