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

ist

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

War es hilfreich?

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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top