2017-03-27 4 views
1

Ich bin nicht in der Lage, herauszufinden, wie Teile des Bash-Skripts einzudrücken, Eindrückung im Code zu bewahren. Ich möchte, dass die Ausgabe korrekt formatiert wird, ohne dass Tabs/Leerzeichen den Ausgabezeilen vorangestellt werden.Entfernen Startregisterkarten Ausgabe Echo mehrzeilige Zeichenfolge

ex: script

#!/bin/bash 

INFO1="something 
output1" 
INFO2="output2" 
MY_INFO=INFO1 

if [ True ]; then 
    INFO=" 
    Here are the test results 
    bbb 
    ccc 
    aaa 
    ${!MY_INFO} 
    " 
fi 
echo "${INFO}" 

Ausgabe zurückgegeben:

Here are the test results 
    bbb 
    ccc 
    aaa 
    something 
output1 

erwartete Ausgabe:

Here are the test results 
bbb 
ccc 
aaa 
something 
output1 
+0

fehlt Ihnen ein 'echo $ INFO'? – meatspace

+0

aktualisiert die Frage –

+0

Wenn Sie diese doppelt zitierte Variable Echo, wird es $ INFO mit den Zeilenumbrüche und Einzug drucken. Wenn Sie es ohne Anführungszeichen wiedergeben, erhalten Sie alles in einer Zeile. Wenn Sie etwas "echo" wollen und die Ausgabe von diesem etwas abweichen, müssen Sie die führenden Leerzeichen mit etwas wie "sed" entfernen. – meatspace

Antwort

1

Quotes Räume Erhaltung ist kein Fehler, es ist ein Merkmal ist. Dafür gibt es doppelte Anführungszeichen.

Das andere Problem ist, dass bash, (im Gegensatz zu python), nichts wissen über zum besseren Lesbarkeit Einrücken - zu bash einem nicht notierten Raum ist die gleiche wie tausend.

Verschiedene Heilmittel:

  1. Auslieferung Einzug wenn mehrzeiligen Strings notiert sind, das heißt:

    if [ True ]; then 
    INFO=" 
    Here are the test results 
    bbb 
    ccc 
    aaa 
    ${!MY_INFO} 
    " 
    fi 
    
  2. Verwenden bash, (oder ein anderes Werkzeug), die Einschnitte zu machen, gehen Sie weg . Also zuerst zergliederte mehrzeiligen String definieren:

    foo=" 
         bar 
         baz" 
    

    Dann zwicken $ foo Leerzeichen zu entfernen:

    foo="${foo// }" 
    

    Jetzt $ foo ist nicht mehr eingerückt, aber das würde zu weit, wenn es Räume gibt, die hätten behalten werden sollen.

  3. Gleiche wie vorher, aber bei der Anzeige der Zeit (das ist mehr verschwenderisch), d.h .:

    echo "${foo// }" 
    
Verwandte Themen