无法清空bash数组(bash --version 3.2.25)

时间:2016-10-14 09:56:46

标签: arrays bash shell

我的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

1 个答案:

答案 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}}循环。