Ich habe eine Anfrage geschrieben:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
local sql - eine sehr lange Zeichenfolge. Die Abfrage ist nicht formatiert. Wie kann ich eine Zeichenfolge in mehrere Zeilen aufteilen?
shell
spricht hier gut? Solltebatch
seinbash
oder sind Sie wirklich von der dunklen Seite ?=
mit Leerzeichen umgeben.Antworten:
Verwenden Sie
read
mit einem Heredoc wie unten gezeigt:quelle
read
in dieser Situation der Exit-Code 1 angezeigt wird. Wenn dies wichtig ist (set -e
z. B. mit dem Sie arbeiten), möchten Sie|| true
am Ende der ersten Zeile ein hinzufügen .set -e
Beendet die Shell, wenn ein Befehl einen "unerwarteten" Exit-Status ungleich Null hat. Mit "unerwartet" meine ich, dass es in einem Kontext ausgeführt wird, in dem Sie den Exit-Status nicht speziell betrachten.false
von sich aus würde zum Beispiel die Shell verlassen.false || true
würde nicht, da Sie den Exit-Status ungleich Null antizipieren, indem Sie einen anderen Befehl angeben, der ausgeführt werden soll, wenn der erste fehlschlägt.-d ' '
hierread
nicht aufhören sollen zu lesen, wenn Sie auf eine neue Zeile stoßen.Fügen Sie bei Bedarf einfach eine neue Zeile ein
Shell sucht nach dem schließenden Anführungszeichen
quelle
sql="SELECT c2, c2
Ich möchte eine zusätzliche Antwort geben, während die anderen in den meisten Fällen ausreichen werden.
Ich wollte einen String über mehrere Zeilen schreiben, aber sein Inhalt musste einzeilig sein.
Es tut mir leid, wenn dies etwas vom Thema abweicht (ich brauchte dies nicht für SQL). Dieser Beitrag gehört jedoch zu den ersten Ergebnissen bei der Suche nach mehrzeiligen Shell-Variablen, und eine zusätzliche Antwort erschien angemessen.
quelle
echo "$sql"
stattecho $sql
.Dank der Antwort von dimo414 auf eine ähnliche Frage zeigt dies, wie seine großartige Lösung funktioniert, und zeigt, dass Sie auch leicht Anführungszeichen und Variablen im Text haben können:
Beispielausgabe
test.sh
quelle
read
exportiert die Variable nicht (was die meiste Zeit gut ist). Hier ist eine Alternative, die in einem Befehl exportiert werden kann, Zeilenvorschübe beibehalten oder verwerfen kann und das Mischen von Anführungszeichenstilen nach Bedarf ermöglicht. Funktioniert für Bash und Zsh.Ich gebe zu, dass die Notwendigkeit des Zitierens dies für SQL hässlich macht, aber es beantwortet die (allgemeiner ausgedrückt) Frage im Titel.
Ich benutze es so
in einer Datei von meiner
.bashrc
und.zshrc
.quelle