Ваш вопрос зависит от оболочки, которую Вы используете.
Оболочка Bourne уезжает очень мало в способе того, что Вы после.
, НО...
Это действительно работает, примерно везде.
Просто пытаются избегать csh. Это было хорошо для дополнительных свойств, которые это добавило, сравнил Оболочку Bourne, но это действительно скрипит теперь. Если Вы не верите мне, просто пытаетесь выделить STDERR в csh! (-:
здесь существует две возможности. Пример выше, а именно, с помощью:
${MyVariable:=SomeDefault}
впервые необходимо обратиться к $MyVariable. Это берет огибающий var MyVariable и, если он в настоящее время не устанавливается, присваивает значение SomeDefault к переменной для более позднего использования.
у Вас также есть возможность:
${MyVariable:-SomeDefault}
, который просто заменяет SomeDefault переменную, где Вы используете эту конструкцию. Это не присваивает значению SomeDefault переменной, и значение MyVariable все еще будет пустым после того, как с этим оператором встретятся.
Другие решения - лучшие ответы на конкретный вопрос. Тем не менее, полезно изучить наиболее общий способ создания глобальных переменных:
# inner scope
Set-Variable -name DynFEx -value 'function DynF() {"Hello DynF"}' -scope global
# somewhere other scope
Invoke-Expression $dynfex
DynF
Прочтите 'help about_Scopes', чтобы получить массу дополнительной информации.
Вы можете определить область действия функции с помощью ключевого слова global
:
function global:DynF {...}
Другой вариант - использовать функцию Set-Item -Path: global: ChildFunction -Value {...}
Использование Set-Item
, вы можете передать либо строку, либо блок скрипта в значение для определения функции.