Variabile d'ambiente all'interno di variabile
-
19-08-2019 - |
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
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"