Echo einer Zeichenfolge mit einer Variablen darin, ohne sie zu erweitern / auszuwerten [geschlossen]

11

Ich habe überall gesucht. Versucht Echo und drucken. Versuchte einfache und doppelte Anführungszeichen. Aber ich habe Daten analysiert und einer Variablen zugewiesen und möchte sie dann auswerten, wenn sich eine Variable darin befindet. Ich werde dann die Variable durch einen Platzhalter ersetzen und nach der Datei suchen.

Beispiel:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

Hier ist mindestens einer meiner vielen Fehler:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

Ich weiß, dass es etwas mit Expansion zu tun hat, habe aber keine Ahnung, wie ich es herausfinden soll. Jede Hilfe wäre dankbar. Vielen Dank!

krmarshall87
quelle
Was müssen Sie lösen? Diese var enthält eine nicht erweiterte $date?. Für diesen Zweck : var='file.$DATE.txt'. Datum erweitern, wenn var verwendet wird? Ich bin sicher, dass Sie erklären müssen, was Sie fragen.
Entschuldigung, um zu testen, ob eine Variable in der Variablen "var" definiert ist. Verschachtelt.
krmarshall87
Ich habe einen Weg gefunden, um mein Dilemma sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
ausgetauscht habe

Antworten:

19

Wenn Sie $dateinnerhalb der Variablen var benötigen :

var='file.$date.txt'

Dadurch bleibt das $ in der Variablen:

$ echo "$var" | grep '\$'
file.$date.txt

quelle
8

Verwenden Sie einfache Anführungszeichen um Variablen, um eine Shell-Erweiterung zu verhindern. Beispiel echo '$file'wird nicht erweitert $file.

Nach Kommentar unten bearbeiten:

Sie können das $Vorzeichen in der varVariablen mit maskieren var="file.\$DATE.txt".

Munir
quelle
Ich brauche es zu erweitern, aber nur eine Ebene. Ich habe vergessen, Schritt für Schritt das gewünschte Ergebnis hinzuzufügen. Ich möchte jedoch, dass der Inhalt der $ -Datei für ein Dollarzeichen ($ DATE) ausgewertet wird.
krmarshall87
Bearbeitet, um das zu lösen.
Munir
Ich erhalte diese Daten von einer externen Quelle. Selbst um das $ durch ein \ $ zu ersetzen, würde ich ein Echo benötigen. Lassen Sie mich jedoch sehen, ob ich es beim Parsen
einpressen