Я хочу знать, как настроить переменную окружения, в которой хранятся другие переменные окружения, но эти переменные окружения не раскрываются, когда я эхо вместо этого, если я использую eval echo тогда он должен раскрыться.

Как я хочу, чтобы echo $TEST_HOME должен привести к /Users/krysto/$PATH/$DATA_DIR

2 ответа2

1

Создайте TEST_HOME используя одинарные кавычки, чтобы предотвратить расширение bash:

$ TEST_HOME='/Users/krysto/$MYPATH/$DATA_DIR'
$ echo $TEST_HOME
/Users/krysto/$MYPATH/$DATA_DIR

Затем можно использовать eval, чтобы расширить его.  В качестве примера:

$ MYPATH=dir1/dir2
$ DATA_DIR=data/dir
$ eval echo $TEST_HOME
/Users/krysto/dir1/dir2/data/dir

Пара замечаний: Соглашение состоит в том, что важные системные переменные, такие как PATH или HOME , все в верхнем регистре. Если вы хотите избежать перезаписи одного из них, сделайте ваши переменные строчными. В частности, переопределение PATH может оставить оболочку, в которой вы находитесь, в основном неработоспособной.

1

Просто экранируйте переменные (не делает различий, если локально или env), например

> test="echo something"
> test1="\$test"
> echo $test1
$test
> eval $test1
something

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .