Как я динамично создаю функции, которые доступны в родительском объеме?

Ваш вопрос зависит от оболочки, которую Вы используете.

Оболочка Bourne уезжает очень мало в способе того, что Вы после.

, НО...

Это действительно работает, примерно везде.

Просто пытаются избегать csh. Это было хорошо для дополнительных свойств, которые это добавило, сравнил Оболочку Bourne, но это действительно скрипит теперь. Если Вы не верите мне, просто пытаетесь выделить STDERR в csh! (-:

здесь существует две возможности. Пример выше, а именно, с помощью:

${MyVariable:=SomeDefault}

впервые необходимо обратиться к $MyVariable. Это берет огибающий var MyVariable и, если он в настоящее время не устанавливается, присваивает значение SomeDefault к переменной для более позднего использования.

у Вас также есть возможность:

${MyVariable:-SomeDefault}

, который просто заменяет SomeDefault переменную, где Вы используете эту конструкцию. Это не присваивает значению SomeDefault переменной, и значение MyVariable все еще будет пустым после того, как с этим оператором встретятся.

7
задан tellingmachine 14 July 2009 в 05:45
поделиться

3 ответа

Другие решения - лучшие ответы на конкретный вопрос. Тем не менее, полезно изучить наиболее общий способ создания глобальных переменных:

# inner scope
Set-Variable -name DynFEx -value 'function DynF() {"Hello DynF"}' -scope global

# somewhere other scope
Invoke-Expression $dynfex
DynF

Прочтите 'help about_Scopes', чтобы получить массу дополнительной информации.

7
ответ дан 6 December 2019 в 06:25
поделиться

Вы можете определить область действия функции с помощью ключевого слова global :

function global:DynF {...}
8
ответ дан 6 December 2019 в 06:25
поделиться

Другой вариант - использовать функцию Set-Item -Path: global: ChildFunction -Value {...}

Использование Set-Item , вы можете передать либо строку, либо блок скрипта в значение для определения функции.

13
ответ дан 6 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

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