0

我有一个文本文件,其中包含说..以下信息说test.text

an
apple of 
one's eye

我想通过执行 cat test.text 来使用 shell 脚本读取数组中的这些行。我尝试过使用a=(`cat test.text`),但这不起作用,因为它将空格视为分隔符。我需要的值为a[0]=an, a[1]=apple of, a[2]=one's eye。我不想使用IFS. 需要帮助,提前谢谢..!!

4

4 回答 4

2

bash4 或以后

readarray a < test.text

这将为每个空行包含一个空元素,因此您可能希望首先从输入文件中删除空行。

在早期版本中,您需要手动构建阵列。

a=()
while read; do a+=("$REPLY"); done < test.text
于 2013-11-08T17:12:27.463 回答
1

您拥有的各种选项之一是read一起使用。设置IFS为换行符和行分隔符为 NUL

IFS=$'\n' read -d $'\0' -a a < test.txt
于 2013-11-08T17:11:50.487 回答
1

清楚的sh

IFS='
'
set -- $(< test.txt)
unset IFS
echo "$1"
echo "$2"
echo "$@"

bash

IFS=$'\n' a=($(< test.txt))
echo "${a[0]}"
echo "${a[1]}"
echo "${a[@]}"

我倾向于说这些是现有解决方案中最好的,因为它们不涉及循环。

于 2013-11-08T17:14:13.077 回答
0

比方说:

cat file
an

apple of

one's eye

使用这个 while 循环:

arr=()
while read -r l; do
    [[ -n "$l" ]] && arr+=("$l")
done < file

测试

set | grep arr
arr=([0]="an" [1]="apple of" [2]="one's eye")
于 2013-11-08T17:10:34.840 回答