Domanda

Ho una variabile d'ambiente chiamata $ TEST che fa riferimento a una directory nel mio script bash ho una variabile chiamata $ VARTEST che è $TEST/dir/file

ora voglio grep il file specificato da $ VARTEST quindi provo a fare:
grep somestring $ VARTEST ma non traduce $ TEST nella sua directory

Ho provato diverse combinazioni di {} , " " e '' ma senza successo

È stato utile?

Soluzione

Penso che tu voglia

eval grep somestring "$VARTEST"

o persino

VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"

ma ricorda (come già detto in altri): se possibile usa

VARTEST="$TEST/foo/bar"

anziché

VARTEST='$TEST/foo/bar'

usa il secondo solo se hai davvero bisogno di una sorta di "valutazione pigra" ...

Attenzione, questo potrebbe essere pericoloso se $ VARTEST contiene un codice dannoso.

Altri suggerimenti

Hai messo virgolette singole intorno a qualcosa? Le virgolette singole impediranno che le variabili vengano tradotte nei loro valori corrispondenti. Le virgolette doppie funzioneranno comunque. Ad esempio:

#!/bin/sh

TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top