Wie verkette ich String-Variablen in Bash?
In PHP können strings verkettet werden zusammen wie folgt:
$foo = "Hello";
$foo .= " World";
Hier $foo
wird "Hallo Welt".
Wie wird dies erreicht in der Bash?
InformationsquelleAutor der Frage Strawberry | 2010-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen zum verbinden von zwei Variablen Sie können nur schreiben, Sie eine nach der anderen:
InformationsquelleAutor der Antwort codaddict
Bash unterstützt auch a + = - operator, wie im folgenden Transkript:
InformationsquelleAutor der Antwort thkala
Bash ersten
Als diese Frage stand speziell für Bashmein Erster Teil der Antwort würden derzeit verschiedene Möglichkeiten, dies zu tun richtig:
+=
: Append variableDie syntax
+=
kann auf verschiedene Weise verwendet werden:Append to string
var+=...
(Denn ich bin genügsam, ich will nur zwei Variablen
foo
unda
und dann wieder verwenden die gleichen in der ganzen Antwort. 😉Mithilfe der Stack Overflow Frage syntax,
funktioniert!
Anfügen an eine integer -
((var+=...))
variable
a
ist ein string, aber auch ein integerAnhängen an ein array
var+=(...)
Unserer
a
ist auch ein array nur aus einem element.Beachten Sie, dass zwischen den Klammern, es gibt eine Raum getrennt array. Wenn Sie speichern möchten, eine Zeichenfolge mit Leerzeichen im array, Sie müssen Sie schließen Sie:
Hmm.. dies ist kein bug, sondern ein feature... um Zu verhindern, dass die bash zu versuchen, zu entwickeln
!"
Sie:printf
: Re-konstruieren Variablen, die mit den builtin BefehlDen
printf
builtin Befehl gibt eine starke Art von Zeichnung string-format. Da dies ein Bash builtines ist eine option für das senden von formatierten string einer Variablen zu, anstatt den Druck aufstdout
:Gibt es sieben strings in diesem array. So konnten wir bauen ein formatierter string mit genau sieben positions-Argumente:
Oder wir könnten ein argument format-string wich wiederholt werden, wie viele argument vorlegen...
Beachten Sie, dass unsere
a
ist immer noch ein array! Nur das erste element wird geändert!Unter bash, wenn Sie auf den Namen einer Variablen, ohne Angabe von index, haben Sie immer die Adresse des ersten element nur!
So rufen unsere sieben Feld-array, wir müssen nur re-set 1. element:
Ein argument format-string mit vielen argument übergeben:
Mit der Stack Overflow Frage syntax:
Nota: Der Einsatz von double-quotes kann nützlich sein für die Manipulation von strings, die
spaces
tabulations
- und/odernewlines
Shell jetzt
Unter POSIX shell, die Sie nicht nutzen konnten bashismsso gibt es keine builtin
printf
.Im Grunde
Aber Sie konnte einfach tun:
Formatiert, mit Gabel
printf
Wenn Sie möchten, um mehr anspruchsvolle Konstruktionen ist die Verwendung einer Gabel (neue child-Prozess, der die Arbeit und das Ergebnis über
stdout
):Historisch, Sie könnte verwenden backticks für das abrufen Ergebnis einer Gabel:
Aber dies ist nicht einfach für Schachteln:
mit backticks, Sie haben zu entkommen inneren Gabeln mit backslashes:
InformationsquelleAutor der Antwort F. Hauri
Können Sie dies auch tun:
InformationsquelleAutor der Antwort userend
Ausgabe
Dies ist nützlich, wenn
$blaohai
führt zu einer variable nicht gefunden Fehler. Oder wenn Sie Leerzeichen oder andere spezielle Zeichen in den Zeichenfolgen.
"${foo}"
richtig entweicht alles, was Sie setzen in.InformationsquelleAutor der Antwort orkoden
InformationsquelleAutor der Antwort vinothkr
Die Möglichkeit, ich würde das problem zu lösen ist nur
Beispielsweise
produziert
Wenn Sie versuchen, Sie zu verketten einer Zeichenfolge mit einer anderen Zeichenfolge, zum Beispiel,
dann
echo "$c"
produzierenmit einem extra Raum.
nicht funktioniert, wie Sie sich vorstellen können, aber
produziert
InformationsquelleAutor der Antwort Chris Smith
InformationsquelleAutor der Antwort stillstanding
Noch ein anderer Ansatz...
...und doch noch ein anderer.
InformationsquelleAutor der Antwort Akseli Palén
Wenn Sie anfügen möchten so etwas wie ein Unterstrich, escape (\)
Bedeutet dies nicht Arbeit:
Dieser gut funktioniert:
InformationsquelleAutor der Antwort user2800471
Können Sie verketten, ohne die Anführungszeichen. Hier ist ein Beispiel:
Diese Letzte Aussage würde print "OpenSystems" (ohne Anführungszeichen).
Dies ist ein Beispiel für ein Bash-Skript:
InformationsquelleAutor der Antwort mariana soffer
Selbst wenn der operator += ist es nun gestattet, es wurde in Bash-3.1 im Jahr 2004.
Jedes Skript mithilfe dieses operators auf ältere Bash-Versionen schlägt fehl mit einem "Befehl nicht gefunden" Fehlermeldung, wenn Sie Glück haben, oder ein "Syntaxfehler in der Nähe unerwartetes token".
Für diejenigen, wer kümmert sich um die Abwärtskompatibilität, stick mit dem älteren standard-Bash-Verkettung Methoden, wie die oben genannten in der gewählten Antwort:
InformationsquelleAutor der Antwort Louis-Félix
Hier ist eine kurze Zusammenfassung von dem, was die meisten Antworten sprechen.
Sagen wir, wir haben zwei Variablen:
Die Tabelle unten erklärt die verschiedenen Kontexte, in denen wir kombinieren können, die Werte von
a
undb
eine neue variable erstellen,c
.Ein paar Hinweise:
+=
ist besser, von einem performance-Sicht, wenn Sie eine große Zeichenfolge wird konstruiert, in kleinen Schritten, vor allem in einer Schleife{}
um Variablen-Namen keine Verwechslungen Ihrer expansion (wie in Zeile 2 in der Tabelle oben)Siehe auch:
InformationsquelleAutor der Antwort codeforester
Der einfachste Weg, mit Anführungszeichen:
InformationsquelleAutor der Antwort betontalpfa
Ich bevorzuge die Verwendung von geschweiften Klammern
${}
für den ausbau der variable in string:Geschweiften Klammern passen zu fortlaufender Verwendung:
Sonst mit
foo = "$fooWorld"
wird nicht funktionieren.InformationsquelleAutor der Antwort Nick Tsai
Gibt es einen besonderen Fall, in dem Sie kümmern sollte:
Ausgabe
"daniel"san
und nichtdanielsan
wie Sie sich das vielleicht gewünscht hätte.In diesem Fall sollten Sie stattdessen tun:
InformationsquelleAutor der Antwort diogovk
Sicherer Weg:
Zeichenfolgen, die Leerzeichen enthalten, kann ein Teil des Befehls, verwenden Sie "$XXX" und "${XXX}," um diese Fehler zu vermeiden.
Plus werfen Sie einen Blick auf andere Antwort über +=
InformationsquelleAutor der Antwort Bohdan
Wenn das, was Sie zu tun versuchen, ist split einen string in mehrere Zeilen, können Sie einen umgekehrten Schrägstrich:
Mit einem Leerzeichen zwischen:
Auch dies fügt nur ein Leerzeichen zwischen:
InformationsquelleAutor der Antwort jcarballo
InformationsquelleAutor der Antwort hari
Wenn es, wie Ihr Beispiel für das hinzufügen
" World"
zu den original-string, dann kann es sein:Die Ausgabe:
InformationsquelleAutor der Antwort 太極者無極而生
Beachten Sie, dass dies nicht funktioniert
wie es scheint, um die drop - $foo und verlässt Sie mit:
aber das wird Arbeit:
und lassen Sie Sie mit der richtigen Ausgabe:
InformationsquelleAutor der Antwort Dss
Ich es auf diese Weise als vorteilhaft: die Verwendung einer inline-Befehl!
InformationsquelleAutor der Antwort Marty
Hier ist der eine, durch AWK:
InformationsquelleAutor der Antwort Avinash Raj
Gibt es äußerten Bedenken über die Leistung, aber keine Daten angeboten. Lassen Sie mich vorschlagen, ein einfacher test.
(HINWEIS:
date
auf macOS nicht bieten Nanosekunden, so dass dies getan werden muss, auf Linux).Habe ich erstellt append_test.sh auf GitHub mit dem Inhalt:
Test 1:
Test 2:
Den Fehler deuten darauf hin, dass mein Bash habe bis 335.54432 MBbevor es abgestürzt. Sie könnte sich ändern, der code von der Verdoppelung der Daten Anhängen einer Konstante um eine detailliertere Grafik und Fehler zeigen. Aber ich denke, das sollte Ihnen genügend Informationen, um zu entscheiden, ob Sie sich interessieren. Persönlich, unter 100 MB weiß ich nicht. Ihre Laufleistung kann variieren.
InformationsquelleAutor der Antwort Bruno Bronosky
Irgendwie mag ich das schnelle Funktion.
Noch einen anderen Weg, um der Haut eine Katze. Dieses mal mit den Funktionen 😀
InformationsquelleAutor der Antwort CommaToast
Ich weiß nichts über PHP, aber das funktioniert in der Linux Bash. Wenn Sie nicht wollen, um es zu berühren, um eine variable, die Sie könnten versuchen, diese:
Konnte Sie eine weitere variable anstelle von 'Hallo' oder '!'. Sie konnte verkettet mehrere Zeichenfolgen als gut.
InformationsquelleAutor der Antwort Ayman Boubleh
Können Sie versuchen, die unten Weg. Wenn substitution stattfindet, doppelte Anführungszeichen halten die Räume.
InformationsquelleAutor der Antwort Ayyappa Boligala