2017-02-21 11 views
1

У меня есть два способа ссылки на скриптовые переменные из отдельного файла сценария. Вот два основных примера:Dot Sourced Variables VS Глобальные переменные

1. Dot Источник
Variables.ps1

$Source = "source" 
$Destination = "dest" 

Execute.ps1

. .\Variables.ps1 
Copy-Item -Path $Source -Destination $Destination -Force 

2. Глобальная переменная
Variables.ps1

$Global:Source = "source" 
$Global:Destination = "dest" 

Execute.ps1

.\Variables.ps1 
Copy-Item -Path $Source -Destination $Destination -Force 

Я проводил исследования, но до сих пор найти окончательную причину, чтобы использовать один над другим. Существуют ли ограничения или предостережения, которые я должен использовать при использовании этих методов? Любой вход очень приветствуется. Спасибо за ваше время.

EDIT:

@ mklement0 дал большой ответ, почему использовать точку-сорсинг над глобальными переменными. Мне бы хотелось, чтобы эта дискуссия открылась. Если есть другая точка зрения, или объяснение относительно использования глобальных переменных более выгодно, мне бы понравилось слушание и голосование соответственно. Спасибо.

ответ

1

Я предлагаю вам использовать точечный-поиск, без явного глобальных переменных (метод 1):

Таким образом, это требует целенаправленных усилий добавить переменные в текущей области. Обратите внимание, что dot-sourcing добавляет переменные в область current, которая может быть или не быть текущей областью текущего сеанса. Общая область (дочерние области создаются путем вызова сценариев (без точки доступа) и блоков сценариев с &, например).

В противоположность этому, использование глобальных переменных (метод 2) создает сеансовые-глобальные переменные независимо от способа вызова, так что даже случайные, не-дот-соерсед вызовы сценария в конечном итоге изменения состояния глобальный.

+0

Интересно. Теперь вы бы предложили dot-sourcing, когда файл сценария переменных ссылается на несколько файлов сценариев? Когда использование глобальных переменных будет более выгодным? – Ethilium

+1

@Ethilium: Да, пусть все эти файлы сценариев явно передают файл переменных с переменным точечным значением - это четко передает намерение - в контексте скриптов, которые полагаются на эти переменные, - и позволяет избежать нежелательных побочных эффектов. Честно говоря, я не знаю о случаях использования глобальных переменных - правильный выбор (но если есть такие случаи, я бы хотел услышать о них). Обратите внимание, что следующим уровнем абстракции будет создание _module_, что ваши скрипты _import_. – mklement0

+1

Благодарим вас за хорошо объясненный и сжатый ответ. Я также буду смотреть на создание модулей. Пометка как правильный ответ. – Ethilium