Bash
為什麼我需要禁用=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
給出相同的警告?
因為前一行以 結束
|
,所以while ... do ... done
循環是管道的一部分:您正在管道進入循環。因此,循環可能會在子 shell 中執行,因此對變數的任何更改
LOCAL_NAMES
可能LOCAL_HOSTS
會失去,具體取決於您實際用於執行此腳本的 shell:它將與 一起使用,ksh
如果你有’s選項集。zsh``bash``bash``lastpipe
使用其他 shell,或者使用
bash
’s 的出廠預設設置,它將失敗。