为什么 bash 不能识别我的换行符?

为什么 bash 不能识别我的换行符?

我正在尝试获取一个脚本来反转主菜的顺序(是的,我知道“tac”命令已经执行此操作)我的脚本如下,打印数组值然后跟着新行的打印 F 行不会打印我的换行符,这真的很烦人。

我尝试将其分离出来并在紧接着该行的后面加上 printf“\n”来打印数组索引值,但这似乎也不起作用。

#!/bin/bash

a=()
while read line; do
    a+="$line"
done

for ((i = 0 ; i <= ${#a[@]} ; i++)); do
    printf "${a[$i]}\n"
done

答案1

问题不在于你的printf陈述,而在于你阅读时的作业——你混淆了追加到数组分配元素的值。要附加到数组,您需要使用a+=("$line")。如果您想使用不带括号的语法,则需要指定要更改的元素的索引,例如a[5]="$line"

您可以在以下位置找到有关数组的更多示例此 Stackovewflow 文档链接(检查“数组修改”部分)

还请注意,您的脚本不会以相反的顺序打印行。要做到这一点,您需要反转循环for以从数组末尾迭代到开头。

相关内容