我在Elastix2.5(CentOS)中有这段代码:
for variable in $(while read line; do myarray[ $index]="$line"; index=$(($index+1)); echo "$line"; done < prueba);
从“prueba”文件中提取每行的值。
Prueba文件内容密码如下:
Admin1234
Hello543
Chicken5444
Dino6759
3434Cars4
Adminis5555
但是,$variable
只能从有字母的行中获取值,我需要从空行中获取NULL
个值。我该怎么办?
答案 0 :(得分:0)
您的问题是for
循环使用command substitution($(...)
);让我们看看这个简单的例子:
$ for v in $(echo 'line_1'; echo ''; echo 'line_3'); do echo "$v"; done
line_1
line_3
请注意第二个echo
命令生成的空字符串是如何被有效丢弃的。
类似地,您的while
循环产生的任何空行都将被丢弃。
解决方案是 avoid for
loops altogether for parsing command output :
在您的情况下,只需使用 while
循环来迭代输入文件:
while read -r line; do
myarray[index++]="$line"
done < prueba
printf '%s\n' "${myarray[@]}"
-r
以确保read
不会修改输入(不会尝试解释\
- 前缀序列) - 这是一般的好习惯
注意如何将索引递增直接移动到数组下标(index++
)。
printf '%s\n' "${myarray[@]}"
在读取文件后打印所有数组元素,表明还读取了空行。
答案 1 :(得分:-1)