Устанавливая переменную, мне следует использовать точечную нотацию или ~?

Устанавливая переменную, мне следует использовать точечную нотацию или ~?

Все мои файлы конфигурации Hadoop находятся по следующим адресам:

./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"

Чтобы задать переменную HADOOP_HOME, нужно ли использовать точечную нотацию или ~?

HADOOP_HOME = "./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"

или

HADOOP_HOME = " ~/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"

решение1

Во-первых, назначения оболочки делаютнетразрешить пробел до или после знака равенства. Оба ваших предложения на самом деле попытаются выполнить команду, буквально называемую HADOOP_HOME.

Относительный — не очень хорошая идея, поскольку относительные пути относительны к текущему рабочему каталогу, а не к домашнему. Так что если вы попали cdв ~/Documents, то это будет означать ~/Documents/.linuxbrew/…. Совсем не то, что вам нужно.

Второй вариант тоже не работает из-за того, как работают кавычки. Расширение ~— это то, что оболочка должна делать — обычно она не должна превращаться в переменную окружения. Но, заключив его в кавычки, вы предотвратили это расширение. Вам нужно убрать часть ~/из кавычек или использовать альтернативное использование $HOME(которое будет расширяться внутри двойных кавычек. Так что любой из этих вариантов должен работать (по крайней мере, если $HOMEзадан ваш домашний каталог, что почти всегда так):

HADOOP_HOME="$HOME/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
HADOOP_HOME=~/".linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"

Лично мне первый вариант кажется более удобным для чтения. Есть и третий вариант — здесь вам на самом деле не нужны никакие кавычки; в имени нет никаких специальных символов. Так что это тоже нормально (и прекрасно читается):

HADOOP_HOME=~/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/

Не забудьте также экспортировать переменную ( export HADOOP_HOME).

Связанный контент