# shellcheck disable=SC2030
次のスクリプトでなぜこれを行う必要があるのかを教えてください。
get_names_and_hosts(){
unset LOCAL_HOSTS
declare -a LOCAL_HOSTS
unset LOCAL_NAMES
declare -a LOCAL_NAMES
multipass list --format json | jq -r '.list[] | [ .name, .ipv4[0] ] | @tsv' |
while IFS=$'\t' read -r name ipaddress; do
# shellcheck disable=SC2030
LOCAL_NAMES+=("$name")
# shellcheck disable=SC2030
LOCAL_HOSTS+=($ipaddress)
done
# shellcheck disable=SC2031
reply=("${LOCAL_NAMES[@]}" "${LOCAL_HOSTS[@]}")
echo "${reply[@]}"
}
声明はdeclare -gx
同じ警告を提供しますか?
ベストアンサー1
前の行が次に終わるため、ループはパイプラインの一部|
です。while ... do ... done
パイプループ。
したがって、ループはサブシェルで実行できるため、このスクリプトの実行に実際に使用するシェルによっては、変数sumへLOCAL_NAMES
の変更が失われる可能性があります。 ■オプションが設定されている場合にLOCAL_HOSTS
機能します。ksh
zsh
bash
bash
lastpipe
他のシェルまたはbash
使用されている工場出荷時の設定では失敗します。
説明はおおよそhttps://www.shellcheck.net/wiki/SC2031知りませんか?