Знак доллара в значении переменной среды

Перейдите к настройкам клавиатуры, выберите макет, а затем параметры. Вы найдете там ctrl + alt + backspace, просто отметьте его и ваше добро пожаловать

1
задан 9 April 2016 в 23:37

3 ответа

Ваш пример не иллюстрирует ваш вопрос.

$ toto="somevalue"
$ MY_VAR="$toto"
$ echo $MY_VAR
somevalue
$ 

Чтобы сделать то, что вы просили, вам понадобится:

MY_VAR='$toto'

или

MY_VAR="\$toto"

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

9
ответ дан 23 May 2018 в 12:19

Многие отметили, что MY_VAR="$toto" назначит MY_VAR текущее значение $toto или пустую строку в случае, если $toto не задан (или в случае, если $toto сам содержит пустую строку), но Я удивлен, что никто не заметил, что MY_VAR="$toto" не будет устанавливать переменную окружения, а скорее переменную оболочки (если только переменная с именем MY_VAR уже присутствует в среде, возможно, потому, что это касается только фактического вопроса) .

Однако, к примеру, нет, это не плохая практика, или же такая же плохая практика, как наличие любого другого специального символа оболочки внутри переменной, что часто невозможно избежать.

[d3 ] В 99% случаев оболочка будет расширять переменную в текущей оболочке не (или вообще не будет ее расширять, если она заключена в одиночные кавычки):

$ MY_VAR='$toto'
$ echo $MY_VAR
$toto
$ echo '$MY_VAR'
$MY_VAR
$ echo "$MY_VAR"
$toto
$ echo $(echo $MY_VAR)
$toto

1% случаев, например, когда ссылка на переменную указана в выражении eval, которая добавляет уровень косвенности:

$ MY_VAR='$toto'
$ eval echo $MY_VAR

$

Но это, очевидно, ожидаемый результат, и опять, то с любым другим специальным символом оболочки внутри переменной следует считать плохую практику таким же образом:

$ MY_VAR='&&'
$ eval echo $MY_VAR
bash: syntax error: unexpected end of file

(правда, что использование eval часто является плохой практикой, именно по этой причине ).

Итак, нет, наличие знака доллара в переменной оболочки / среды не является плохой практикой, по крайней мере, не более, чем с любым другим специальным символом оболочки.

8
ответ дан 23 May 2018 в 12:19

Чтобы ответить на ваш точный вопрос:

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

MY_VAR="$toto"

$ является специальным символом для вашей оболочки (будь то bash или dash) и если не защищен от переменной

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

2
ответ дан 23 May 2018 в 12:19
  • 1
    Так что, если это плохая практика, и я думаю, что это может быть так, то что, если у вас должна быть переменная среды, значение которой начинается с знака $ (например, для пароля)? – jon 8 April 2016 в 16:29
  • 2
    @jon, см. выше. Вам нужно избежать $, либо с люфтом, либо с одиночными кавычками. [F2] или MY_VAR='$toto' (или даже MY_VAR='$t'o"t"\o, все они делают то же самое точное.) И это спорно ли это или нет на самом деле плохая практика; это зависит также от того, для чего должна использоваться переменная среды. Если для этого нет веских оснований, я бы избегал иметь буквальный знак доллара в переменных среды. – Wildcard 8 April 2016 в 19:36

Другие вопросы по тегам:

Похожие вопросы: