Переменная среды внутри переменной
-
19-08-2019 - |
Вопрос
У меня есть переменная окружения $TEST
, которая ссылается на каталог
в моем скрипте bash у меня есть переменная $VARTEST
, которая $TEST/dir/file
Теперь я хочу выполнить поиск файла, указанного в grep somestring $VARTEST
, поэтому я пытаюсь сделать следующее:
{}
но это не переводит ""
в каталог
Я пробовал разные комбинации ''
, <=> и <=>, но безуспешно
Решение
Я думаю, что вы хотите
eval grep somestring "$VARTEST"
или даже
VARTEST_EVALUATED=$(eval echo $VARTEST)
grep "$SOMESTRING" "$VARTEST_EVALUATED"
но помните (как уже говорили другие): по возможности используйте
VARTEST="$TEST/foo/bar"
вместо
VARTEST='$TEST/foo/bar'
используйте второй, только если вам действительно нужна «ленивая оценка» ...
Внимание, это может быть опасно, если $VARTEST
содержит вредоносный код.
Другие советы
Вы поместили одинарные кавычки вокруг чего-нибудь? Одинарные кавычки не дадут переменным перевести их в соответствующие значения. Двойные кавычки будут работать, хотя. Например:
#!/bin/sh
TEST="/etc"
VARTEST="$TEST/passwd"
grep "$LOGNAME" "$VARTEST"