Warum erkennt bash meinen Newline-Charakter nicht?

410
Anyon

Ich versuche, ein Skript zu erhalten, um die Reihenfolge der Entrees umzukehren (ja, ich weiß, dass der Befehl "tac" dies bereits tut). Mein Skript lautet wie folgt: Die print-F-Zeile, die den Array-Wert druckt, wird von einer neuen Zeile gefolgt Mein Newline nicht drucken, und es ist wirklich nervig.

Ich habe versucht, es zu trennen und printf "\ n" in der Zeile unmittelbar nach der Zeile zu verwenden, um den Array-Indexwert zu drucken, aber das scheint auch nicht zu funktionieren.

#!/bin/bash  a=() while read line; do a+="$line" done  for ((i = 0 ; i <= ${#a[@]} ; i++)); do printf "$\n" done 
0

1 Antwort auf die Frage

0
Adalee

Das Problem ist nicht Ihre printfAnweisung, sondern Ihre Zuweisung beim Lesen. Sie mischen die Syntax des Anfügens an das Array mit der Zuweisung des Werts eines Elements . Um an ein Array anzuhängen, müssen Sie a+=("$line")stattdessen verwenden. Wenn Sie die Syntax ohne Klammern verwenden möchten, müssen Sie beispielsweise den Index des Elements angeben, das Sie ändern möchten a[5]="$line".

Weitere Beispiele für Arrays finden Sie zum Beispiel in diesem Stackovewflow-Dokumentationslink (siehe Abschnitt "Array-Änderung") .

Beachten Sie auch, dass Ihr Skript die Zeilen nicht in umgekehrter Reihenfolge druckt. Dazu müssen Sie den forZyklus umkehren, um vom Ende des Arrays bis zum Anfang zu iterieren.