Ich versuche, eine mehrzeilige Zeichenfolge sauber zu erstellen, die Backslashes und Variablensubstitution enthält. Ursprünglich habe ich nicht Schrägstriche müssen und war in der Lage zu erreichen, was ich mit diesem Code-Schnipsel benötigt:Mehrzeilige Zeichenfolge mit Zeilen, die mit einem Schrägstrich enden
description=$(cat <<EOF
Creation time: $(date)
Creator: $test_group_creator
Test group: $test_group
Test execution: $test_execution_id - $test_name
Adapter: $initiator1_mac_addr
http://...
EOF
)
Es ist nicht ideal, da es ein wenig klobig am Ende aussieht und erfordert ich die Einrückungsebene des Codes zu brechen, aber es ist ziemlich klar und stellt dar, wie die Beschreibung später auf einer Webseite erscheinen wird. (. Ich bin mir der < < -EOF Syntax, aber wir sind mit 4-Raum-Einzüge in Code und die Syntax erfordert Tabs) Hier wird die Variable Echo aus:
Creation time: Tue Jun 27 15:22:27 PDT 2017
Creator: langlorx
Test group: all
Test execution: 13 - go
Adapter: eth0
link...
jedoch vor kurzem, der Text hat wurde auch in einen Wiki-Parser eingefügt und jetzt werden Zeilenumbrüche auf ein einzelnes Leerzeichen reduziert. Um einen Zeilenumbruch im mittleren Absatz zu erzwingen, muss die Zeile in einem doppelten Backslash enden. Da ich wusste, dass Bash Backslashes speziell behandelt, wusste ich, dass ich die Double Backslashes verdoppeln musste, aber es kam immer noch nicht richtig raus. dies mit:
description=$(cat <<EOF
Creation time: $(date)\\\\
Creator: $test_group_creator\\\\
Test group: $test_group\\\\
Test execution: $test_execution_id - $test_name\\\\
Adapter: $initiator1_mac_addr\\\\
http://...
EOF
)
Ich finde, dass die Zeilenumbrüche vollständig in der resultierenden Variable weg sind, und die letzte \\\\ Sequenz, bevor die Leerzeile Ergebnisse in einem einzigen Schrägstrich in den Variablen mit der Leerzeile komplett verschwunden. Ohne umgekehrte Schrägstriche kommt die resultierende Zeichenfolge genau wie oben beschrieben mit Zeilenumbrüchen, Leerzeilen und mit den ersetzten Variablen heraus. Sobald ich alle Backslashes am Ende einer Zeile einfüge, löst es in bash einen anderen Regelsatz für die Codierung der Variablen aus.
Creation time: Tue Jun 27 15:20:17 PDT 2017\\Creator: user\\Test group: all\\Test execution: 12 - go\\Adapter: eth0\link...
Gibt es einen besseren Weg, dies in bash zu tun, als zu versuchen, Katze und Kommandosubstitution zu missbrauchen, während immer noch den Code etwas sauber zu haben?