# 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
작동합니다 .ksh
zsh
bash
bash
lastpipe
다른 쉘이나 bash
사용된 공장 기본 설정의 경우 실패합니다.
설명은 대략https://www.shellcheck.net/wiki/SC2031모르시나요?