我的bash数组永远不会自行清空。
我正在使用bash 3.2.25。 我尝试使用以下方法:
declare -a array
# fill array...
# 1
array=()
# 2
empty_array=()
array=( "${empty_array[@]}" )
# 3
unset array
我的阵列永远不会被清空,我做错了什么?
所要求的完整代码:
declare -a array
function get_array() {
#active_tills=()
#unset active_tills
#active_tills=( "${active_tills[@]}" )
# fill array
while read -r line || [[ -n "$line" ]]; do
line=$(echo "$line" | cut -d' ' -f1)
if [ -n "$line" ] ; then
to_add+="$line "
fi
done < "$request_tmp"
array=($(echo $to_add))
return 0
}
然后
get_array
for host in "${array[@]}"; do
echo "=> $host"
done
# 1
# 2
# 3
get_array
for host in "${array[@]}"; do
echo "=> $host"
done
# 1
# 2
# 3
# 1
# 2
# 3
答案 0 :(得分:1)
to_add
也是一个全局变量,您在追加它之前不会重置其值。但是,您不需要它:您可以直接附加到阵列。
declare -a array
function get_array() {
local line rest
array=()
while read -r line rest || [[ -n "$line" ]]; do
if [ -n "$line" ] ; then
array+=("$line")
fi
done < "$request_tmp"
return 0
}
顺便说一句,如果你可以保证输入文件以换行符结尾(正如POSIX中正确的文本文件所要求的那样),你就不需要|| [[ -n $line ]]
hack while
hack 1}}循环。