= SC2031を無効にする必要があるのはなぜですか?

= SC2031を無効にする必要があるのはなぜですか?

# 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機能します。kshzshbashbashlastpipe

他のシェルまたはbash使用されている工場出荷時の設定では失敗します。

説明はおおよそhttps://www.shellcheck.net/wiki/SC2031知りませんか?

おすすめ記事