GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verzögere ich die Variablenerweiterung?

Ich wollte einige Zeichenfolgen am Anfang meines Skripts mit Variablen initialisieren, die noch nicht festgelegt wurden, wie zum Beispiel:

str1='I went to ${PLACE} and saw ${EVENT}'
str2='If you do ${ACTION} you will ${RESULT}'

und dann später auf PLACE , EVENT , ACTION und RESULT wird gesetzt. Ich möchte dann in der Lage sein, meine Zeichenfolgen mit den erweiterten Variablen auszudrucken. Ist meine einzige Option eval ? Das scheint zu funktionieren:

eval "echo ${str1}"

ist das Standard? gibt es einen besseren Weg, dies zu tun? Es wäre schön, eval nicht auszuführen wenn man bedenkt, dass die Variablen alles sein könnten.

Akzeptierte Antwort:

Mit der Art der Eingabe, die Sie zeigen, ist die einzige Möglichkeit, die Shell-Erweiterung zu nutzen, um Werte in eine Zeichenfolge zu ersetzen, die Verwendung von eval in irgendeiner Form. Dies ist sicher, solange Sie den Wert von str1 kontrollieren und kann sicherstellen, dass nur Variablen referenziert werden, die als sicher bekannt sind (keine vertraulichen Daten enthalten) und keine anderen Shell-Sonderzeichen ohne Anführungszeichen enthalten. Sie sollten den String in doppelte Anführungszeichen oder in ein Here-Dokument erweitern, also nur "$` sind etwas Besonderes (ihnen muss ein vorangestellt werden in str1 ).

eval "substituted="$str1""

Es wäre viel robuster, eine Funktion anstelle eines Strings zu definieren.

fill_template () {
  sentence1="I went to ${PLACE} and saw ${EVENT}"
  sentence2="If you do ${ACTION} you will ${RESULT}"
}

Setzen Sie die Variablen und rufen Sie dann die Funktion fill_template auf um die Ausgangsvariablen zu setzen.

PLACE=Sydney; EVENT=fireworks
ACTION='not learn from history'; RESULT='have to relive history'
fill_template
echo "During my holidays, $sentence1."
echo "Cicero said: "$sentence2"."

Linux
  1. So weisen Sie einer Variablen die Ausgabe eines Linux-Befehls zu

  2. Wie wird eine indirekte Variablenauswertung durchgeführt?

  3. Bash Brace Erweiterung &Variablen?

  4. Wie verwende ich atomare Variablen in C?

  5. Wie man Umgebungsvariablen eines Prozesses liest

So legen Sie Umgebungsvariablen in MacOS fest

So verwenden Sie Variablen im Ansible Playbook

So verwenden Sie Variablen in Shell-Skripten

So installieren Sie Maven unter Windows

So setzen/löschen Sie Umgebungsvariablen in Linux

So setzen Sie die Umgebungsvariable in Bash