为何PowerShell脚本接收不同用户输入时均输出相同字符串?
问题根因
首先你编写的不是传统Shell(bash/zsh等)脚本,是PowerShell脚本,两者语法体系不通用。你的问题既不是Read-Host的保存机制问题,也不是用错了功能模块,是脚本里存在两个基础语法错误:
- 比较运算符误用:PowerShell 中
=是赋值运算符,不是相等判断运算符。你写的if ($userInput = 1)逻辑,本质是先把$userInput赋值为1,这个赋值表达式的返回值为1,在条件判断中会被识别为真,因此不管你之前输入的是什么内容,第一个if分支永远会被触发,根本不会走到后面的elseif判断。PowerShell 里的相等比较要使用-eq运算符。 - 类型匹配问题:
Read-Host接收的所有用户输入默认都是字符串类型,哪怕你输入数字1、2,存在变量里的也是字符串"1"、"2",直接和数字类型的1、2比较虽然PowerShell会做隐式类型转换,但很容易出现非预期的匹配结果,严谨写法要保证比较两侧的类型一致。
修正后可运行代码
Write-Output "Would you like to create a text file?" $userInput = Read-Host "Y [1] Or N [2]? " if ($userInput -eq "1") { Write-Output "Create file" } elseif ($userInput -eq "2") { Write-Output "No file created." } else { Write-Output "Incorrect entry." }
如果需要强制用户输入为整数,可以对输入做显式类型转换,写法为$userInput = [int](Read-Host "Y [1] Or N [2]? "),这种写法下如果用户输入非数字内容会直接抛出错误,适合输入格式要求严格的场景。
内容的提问来源于stack exchange,提问作者saturnSam
相关产品推荐
相关产品推荐

