将行存储到数组中时保留空间

时间:2013-05-29 14:49:07

标签: arrays bash space lines

我在网站上找不到解决方案。

如何在bash中将文本内容存储到数组中?

此代码实际上是在删除字符串之前的空格。

index=0

while read line; do
echo $line
str_array[index]="$line"
done < /testfile

3 个答案:

答案 0 :(得分:2)

对于bash,请使用内置mapfile

$ cat testfile
asdf
 asdf
  asdf
   asdf
$ mapfile -t str_array < testfile
$ printf "%s\n" "${str_array[@]}"
asdf
 asdf
  asdf
   asdf

在bash提示下,请参阅help mapfile

答案 1 :(得分:1)

您需要取消定义字段分隔符,因此它会像:

while IFS= read line; do
  echo "$line"
  ...
done < /testfile

答案 2 :(得分:1)

您可以这样做:

index=0

while IFS= read line ; do
    str_array[$index]="$line" 
    index=$(($index+1))
done < testfile
@glennjackman在评论中建议

index=0

while IFS= read line ; do
    str_array[index++]="$line" 
done < testfile