我有一个文本文件,其中包含说..以下信息说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
. 需要帮助,提前谢谢..!!
在bash
4 或以后
readarray a < test.text
这将为每个空行包含一个空元素,因此您可能希望首先从输入文件中删除空行。
在早期版本中,您需要手动构建阵列。
a=()
while read; do a+=("$REPLY"); done < test.text
您拥有的各种选项之一是read
与bash一起使用。设置IFS
为换行符和行分隔符为 NUL
IFS=$'\n' read -d $'\0' -a a < test.txt
清楚的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[@]}"
我倾向于说这些是现有解决方案中最好的,因为它们不涉及循环。
比方说:
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")