=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에 대한 변경 사항이 손실될 수 있습니다. s 옵션이 설정된 경우 LOCAL_HOSTS작동합니다 .kshzshbashbashlastpipe

다른 쉘이나 bash사용된 공장 기본 설정의 경우 실패합니다.

설명은 대략https://www.shellcheck.net/wiki/SC2031모르시나요?

관련 정보