壳牌||将元素添加到由行而不是空格分隔的数组

时间:2015-08-23 12:42:40

标签: linux bash shell unix command

我正在循环中读取一个文件,每次迭代都有字符串。我需要将此元素添加到数组中但在新行中

我使用blow cmd ARRAYNAME + = $ ELEMENTNAME

但是会发生什么事情将thet元素添加到最后一个元素但用“”而不是行

分隔
while IFS='' read -r line || [[-n "$line" ]];do
MAPPING=`echo $line | grep -e session -e sub | cut -d: -f3 | grep -i ","`
MAPPINGMAT+=("$MAPPING")
echo ${MAPPINGMAT[*]}
done < "$1"

输出

1
1 2
1 2 3

但我需要它

1
2
3

2 个答案:

答案 0 :(得分:2)

使用括号:

ARRAYNAME+=("$ELEMENTNAME")

将项目附加到ARRAYNAME

的末尾

您看到以下输出的原因

1
1 2
1 2 3

是你在每次迭代中在循环中打印整个数组。因此echo ${MAPPINGMAT[*]}不应该在循环中。将其替换为简单的echo "$MAPPING"

答案 1 :(得分:1)

使用parens和引号,我将整行作为数组元素,如下所示:

declare -a arr
while read -r line; do
    arr+=("$line")
done < input

然后我在arr中得到每一行,如下所示:

for(( i=0; i<${#arr[@]}; i++ )); do
    echo ${arr[$i]}
done