Umgebungsvariable innerhalb Variable
-
19-08-2019 - |
Frage
Ich habe eine Umgebungsvariable $TEST
genannt, die auf ein Verzeichnis verweist
in meinem Bash-Skript habe ich eine Variable namens $VARTEST
die $TEST/dir/file
Jetzt möchte ich die Datei von $VARTEST
angegeben grep so dass ich versuchen zu tun:
grep somestring $VARTEST
aber es übersetzt nicht $TEST
in es ist Verzeichnis
Ich habe verschiedene Kombinationen von {}
, ""
und ''
versucht, aber ohne Erfolg
Lösung
Ich glaube, Sie wollen
eval grep somestring "$VARTEST"
oder auch
VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"
aber nicht vergessen (wie andere schon gesagt): Verwenden Sie möglichst
VARTEST="$TEST/foo/bar"
statt
VARTEST='$TEST/foo/bar'
nur die zweite, wenn Sie brauchen Art ‚lazy evaluation‘ wirklich ...
Achtung, dies gefährlich sein könnte, wenn $VARTEST
malicous Code enthält.
Andere Tipps
Haben Sie einfache Anführungszeichen um etwas sagen? Einfache Anführungszeichen werden die Variablen aus wird übersetzt in die entsprechenden Werte verhindern. Doppelte Anführungszeichen obwohl funktionieren. Zum Beispiel:
#!/bin/sh
TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"