从列表中填充数组;如果没有回车,则不会读取项目

时间:2015-11-03 19:51:57

标签: linux shell unix zsh

我正在将项目读入数组然后将其打印出来。我注意到的是,如果列表中的最后一项没有回车符,它就不会成为数组的一部分。如果列表中只有一个项目,则会发生同样的事情。

# Read the file in parameter and fill the array named "array"
getArray() {
    local i=0
    array=() # Clear array
    while IFS= read -r line # Read a line
    do
        array+=( "$line" ) # Append line to the array

    done < "$1"
}

getArray "list.txt"

#display array elements
for e in "${array[@]}"
do
    echo $e
done

list.txt包含以下内容:

绿色

褐色

如果棕色后没有回车,例如,棕色将不是阵列的一部分。无论如何要解决这个问题?

1 个答案:

答案 0 :(得分:0)

hacky解决方案是接受不以换行符结尾的非空行。

while IFS= read -r line || [[ -n $line ]]; do

但是,您可以使用mapfile模块替换循环处理带尾随换行符的数据。

zmodload zsh/mapfile
array=("${(f@)${mapfile[list.txt]%$'\n'}}")