допустимые символы в именах переменных среды linux

<p>какие символы разрешены в именах переменных среды linux? мой беглый поиск по страницам руководства и по сети действительно дал информацию только о том, как работать с переменными, но не о том, какие имена разрешены.</p><p>у меня есть программа java, для которой требуется определенная переменная среды, содержащая точку, например <code>com.example.fancyproperty</code>. в windows я могу установить эту переменную, но мне не повезло установить ее в linux (пробовал в suse и ubuntu). это имя переменной даже разрешено?</p>

<p>от <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd\_chap08.html">открытая группа</a> :</p><blockquote> <p>эти строки имеют форму имя = значение; <strong> имена не должны содержать символ '='. </strong> для переносимых значений в системах, соответствующих стандарту ieee std 1003.1-2001, значение должно состоять из символов из переносимого набора символов (<strong> за исключением nul и как указано ниже </strong>).</p> </blockquote><p>таким образом, имена могут содержать любой символ, кроме = и nul, но:</p><blockquote> <p><strong> имена переменных среды, используемые утилитами в томе shell и utilities стандарта ieee std 1003.1-2001, состоят исключительно из заглавных букв, цифр и символа \_ (подчеркивание) </strong> из символов, определенных в переносимом наборе символов <strong> и не начинаются с цифры </strong>. другие символы могут быть разрешены реализацией; заявки должны терпеть наличие таких имен.</p> </blockquote><p>таким образом, хотя имена могут быть действительными, ваша оболочка может не поддерживать ничего, кроме букв, цифр и подчеркиваний.</p>

<p>раздел стандартов posix для оболочек <a href="http://www.opengroup.org/onlinepubs/9699919799/utilities/v3\_chap02.html#tag\_18\_10\_02">ieee std 1003.1-2008/ieee posix p1003.2/iso 9945.2</a> стандарт shell and tools не определяет лексическое соглашение для имен переменных, однако краткий <a href="ftp://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz">посмотрите на источник</a> показывает, что он использует что-то похожее на</p><p><code>[a-za-z\_]+[a-za-z0-9\_]*</code></p><p>(правка: добавлено недостающее подчеркивание во втором классе символов.)</p><p>небольшое примечание: поскольку некоторые оболочки не поддерживают + в регулярном выражении, потенциально более переносимое регулярное выражение может быть:</p><p><code>[a-za-z\_]{1,}[a-za-z0-9\_]{0,}</code></p>

<p>мое быстрое тестирование показало, что они в основном следуют тем же правилам, что и имена переменных c, а именно</p><ol> <li>a-z, a-z, <code>\_</code> и 0-9</li> <li>не может начинаться с цифры</li> </ol><p>так что это исключает <code>.</code> внутри них. любое недопустимое имя переменной обозначается <code>unknown command</code>.</p><p>это было проверено в zsh, который в основном совместим с bash.</p>

<p>зависит от того, что вы подразумеваете под "разрешено".</p><p>игнорирование windows для одноразового номера:</p><p>среда представляет собой массив строк, передаваемых основной функции программы. если вы прочитаете execve (2), вы не увидите никаких требований или ограничений на эти строки, кроме null-terminating.</p><p>по соглашению каждая строка состоит из name = value. соглашения о цитировании не существует, поэтому в этом соглашении не должно быть символа "=".</p><p>нормальные люди устанавливают эти строки, обсуждая их со своей оболочкой. у каждой оболочки есть свои представления о том, что является допустимыми переменными name, поэтому вам нужно прочитать страницу руководства для shell-of-of-the-time, чтобы увидеть, что она думает.</p><p>обычно такие вещи, как com.baseball.spit = fleagh, являются системными свойствами java, и независимо от того, желает ли какая-либо программа java вернуться к среде, лучше указать их с помощью -д.</p>

<p>это зависит от shell. я предполагаю, что вы используете bash по умолчанию, в этом случае разрешены буквы, цифры и подчеркивания, но вы не можете начинать имя переменной с цифры. начиная с bash v.3, <a href="http://tldp.org/ldp/abs/html/gotchas.html">точки не допускаются в именах переменных</a> .</p>