我有一个带有默认值的菜单。通过选择菜单项,我希望菜单项的值进行切换。我的切换功能无法正常工作,因为我无法设置全局变量,因此我使用了一些在SO上找到的示例,并且能够切换预设值。现在,我发现我无法将默认选项变量传递给切换功能并进行设置。请指教。谢谢。
#toggle test
$optionYes="Yes"
$optionNo="No"
echo "$optionYes, $optionNo"
function toggle($option) {
if ($option -eq "Yes") { $global:option="No" }
elseif ($option -eq "No") { $global:option="Yes" } }
toggle $optionYes
toggle $optionNo
echo "$optionYes, $optionNo"
$defaultExcel = "Yes"
function toggleOption($defaultOption) {
if ($defaultOption -eq "Yes") {
$global:defaultOption = "No"
} elseif ($defaultOption -eq "No") {
$global:defaultOption = "Yes"
}
$redrawMenu
}
function displayMenu() {
echo "1) Excel [$defaultExcel]"
echo "[1] to toggle option"
}
function runMenu() {
do {
displayMenu
$choice=(Read-Host "Option")
switch ($choice) {
'1' {toggleOption $defaultExcel; runMenu}
'Q' {exit}
}
} until ($choice -eq "Q")
}
runMenu
答案 0 :(得分:1)
全局变量使代码令人困惑。从功能生成全局变量会使代码无法维护。我建议从函数中获取一个返回值,然后将其存储到所需的变量中:
function Set-Option {
param(
[Parameter(Position = 0, Mandatory)]
[ValidateSet('Yes', 'No')]
[string] $Option
)
if ($Option -eq 'Yes') {
'No'
} else {
'Yes'
}
}
使用中:
'1' { $global:DefaultOption = Set-Option $defaultExcel; runMenu }