Переменные среды (например,% PATH%), правила расширения и т. Д.

317
mpag

Я пытаюсь понять, как вы узнаете, будет ли расширяемая строка правильно раскрыта в Pathпеременной окружения пользователя .

Поскольку, как представляется, отсутствие надлежащей документации на веб - сайте MS ( они являются ближе я могу найти, SE темы здесь и здесь также применимы), мои вопросы (и наблюдения) можно классифицировать следующим образом .

  1. Тип переменной

    • MS документирует, что это может быть String, Expandable String или Multistring.
    • По умолчанию это стандартная строка.
    • Если используется несколько строк, распознается только первая строка.
    • Кажется, моя система периодически возвращается к стандартной строке после первого расширения переменных (с фиксированными значениями) из расширяемой строки.
    • Я не уверен, что это Microsoft Updates или мошеннические установщики, которые изменяют тип обратно на стандартную строку.
  2. Слои переменных переменных среды

    • На сколько слоев расширения переменных я могу положиться? Этот поток SE, кажется, указывает на то, что он непредсказуем.
      • Прямо сейчас у меня есть Path=%A_ProPath%где A_ProPath еще одна расширяемая строка, которая начинается %_SysPWin%;%_SysPIntel%;%_SysPVSdotNET%;%_SysPPy%;%_SysPPerl%;%_SysPChoc%;%_SysPJava%;%_SysPSQL%;.
      • Однако если внутри% _SysPIntel% я ссылаюсь на% _Intel_SW% (C: \ Program Files (x86) \ IntelSWTools), это не расширяется.
    • Я получал разные результаты, если бы у меня был установлен тип переменной, который можно расширять, но без каких-либо %var%ссылок внутри, вместо того, чтобы просто установить тип переменной для стандартной строки. Кажется, что ссылки на стандартные строки чаще расширяются, чем ссылки на расширяемые строки. Почему это?
  3. Последовательность расширения расширяемых строк

    • Расширение переменной не является рекурсивным, поэтому с циклическими ссылками проблем не возникает
    • Похоже, что расширение происходит только в алфавитном порядке и только за один проход (на уровень: система, а затем пользователь).
    • Порядок добавления или изменения значений переменных не имеет значения
    • Переменные нечувствительны к регистру
    • Pathв ваших системных переменных то же, что %PATH%или %path%в окне командной строки).
    • Я не знаю, все ли они преобразуются в один случай до алфавитизации.

      1. Я полагаю, что я начал делать, _чтобы приводить имена переменных, потому что любые значения были расположены в алфавитном порядке после того, как Path не расширялся в моем пути, но это предполагает, что вы не можете использовать% SystemRoot% или% WinDir% непосредственно в пути. Есть ли в этом смысл?

      2. Предполагая, что переменные среды расширяются в порядке их алфавитного вида, я также предполагаю, что переменные среды нечувствительны к регистру. Но при сортировке против неалфавитных символов оцениваются ли переменные среды, как если бы какие-либо буквы были в нижнем регистре, а затем сравнивались по значению ascii (например, perlre [0-9\- _]all встречается до az)? или в верхнем регистре перед сравнением ascii ( _идет после алфавита)?

      3. Какой набор допустимых символов используется в именах переменных? Можно ~[]()и т. Д. Использовать? ?*!.?

      4. Если есть системная переменная среды с именем PATH и пользовательская переменная PATH, какая оценка выполняется в первую очередь? Может ли мой пользовательский PATH ссылаться на пользовательские переменные системного уровня?

1
В этом одном посте задано слишком много вопросов. Пожалуйста, [отредактируйте] свой вопрос, чтобы сосредоточиться на одном вопросе, включая * возможно * любые явно связанные побочные запросы. Вы можете задавать несколько вопросов на этом сайте и легко ссылаться на них, чтобы предоставить контекст, если хотите. Twisty Impersonator 5 лет назад 0
(сейчас работаю над редактированием. извините за неполное редактирование) mpag 5 лет назад 0
Полезно выполнять редактирование в автономном режиме (например, в текстовом редакторе или текстовом редакторе), а затем публиковать его как единое редактирование, когда вы закончите. (ИМО, это все еще неясно и слишком широко.) Scott 5 лет назад 0

0 ответов на вопрос