Arrays 如何在shell脚本中编写忽略空格字符的数组?

Arrays 如何在shell脚本中编写忽略空格字符的数组?,arrays,bash,shell,Arrays,Bash,Shell,我有一个文本文件,其中包含say..以下信息saytest.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。需要帮助,请提前感谢 比方说: cat file an apple of one's eye 使用此w

我有一个文本文件,其中包含say..以下信息say
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
。需要帮助,请提前感谢

比方说:

cat file
an

apple of

one's eye
使用此while循环:

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

cat file
an

apple of

one's eye
使用此while循环:

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

您可以使用
read
和。将
IFS
设置为换行符,将行分隔符设置为NUL

IFS=$'\n' read -d $'\0' -a a < test.txt
IFS=$'\n'read-d$'\0'-a
您可以使用
阅读
。将
IFS
设置为换行符,将行分隔符设置为NUL

IFS=$'\n' read -d $'\0' -a a < test.txt
IFS=$'\n'read-d$'\0'-a
bash
4或更高版本中

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

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

a=()
while read; do a+=("$REPLY"); done < test.text
a=()
边读边读;做一个+=(“$REPLY”);完成
bash
4或更高版本中

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

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

a=()
while read; do a+=("$REPLY"); done < test.text
a=()
边读边读;做一个+=(“$REPLY”);完成
Plain
sh

IFS='
'
set -- $(< test.txt)
unset IFS
echo "$1"
echo "$2"
echo "$@"
我倾向于说这些是最好的解决方案,因为它们不涉及循环。

Plain
sh

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

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

$'\0'
实际上相当于
'
(变量在内部是C字符串)@JoSo,很好。我倾向于使用
$'\0'
来与
$'\n'
保持一致。你是对的,这至少在视觉上更加一致。缺点是它隐藏了shell不能在变量中存储NUL的事实。bash中的read-num分隔特性甚至可能不是故意的,而是源于这样一个事实:算法是“delim的第一个字符用于终止输入行,而不是换行符”。如果参数是空字符串,则不会进一步指定。该实现只是取消对变量对应的C字符串的引用,在空字符串的情况下生成NUL终止符。(请参阅)
$'\0'
实际上相当于
'
(变量在内部是C字符串)@JoSo,很好。我倾向于使用
$'\0'
来与
$'\n'
保持一致。你是对的,这至少在视觉上更加一致。缺点是它隐藏了shell不能在变量中存储NUL的事实。bash中的read-num分隔特性甚至可能不是故意的,而是源于这样一个事实:算法是“delim的第一个字符用于终止输入行,而不是换行符”。如果参数是空字符串,则不会进一步指定。该实现只是解除对变量对应的C字符串的引用,在出现空字符串时生成NUL终止符。(请参阅)