Экспорт в macOS env var экранируется или неправильно интерпретируется в оболочке

#macos #command-line #terminal #env-file

Вопрос:

Здесь Mac OS. На терминале я создаю следующий .env файл:

 export FIZZ=foo
export BUZZ="$2a$10$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO"
 

Потом я бегу source .env amp;amp; echo $FIZZ и вижу:

 foo
 

Пока все идет хорошо. Но теперь я бегу echo $BUZZ , и результат такой:

 a0.pQJ4oYWP.m4qdRKRQlyO
 

Я явно заключил значение for BUZZ в двойные кавычки ( "$2a$10$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO" ), так почему же оно выводится как "a0.pQJ4oYWP.m4qdRKRQlyO" ?

Ответ №1:

Я смог воспроизвести то, что вы видели. Я почти уверен, что у вас возникли проблемы с подстановкой переменных окружения, которую выполняет bash. (запускается символом»$».) Я знаю два способа «исправить» это.

Один из них состоит в том, чтобы избежать символов «$» с предшествующей обратной косой чертой. export BUZZ=$2a$10$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO

Другой способ-изменить способ цитирования строки. Используйте одинарные кавычки вместо двойных кавычек… export BUZZ='$2a$10$Hk1PB6Eyf5Pu71JLfH6fCexjzOIwkctk.pQJ4oYWP.m4qdRKRQlyO' .

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