PowerShell函数调用问题

简介: powershell函数调用问题及原因分析。。。此代码是测试使用,重点是函数调用问题。。。 开始我是这么写的,结果发现无论如何函数返回的都是0,函数如下: 文件test.txt的内容如下: 也就是,即使我现在输入haha或者houhou或者heihei,它还是提示“none,you can add it!!”,这是怎么回事,我上网搜了下原来powershell的函数调用不用加括号,直接在函数后面写参数就行了。

    powershell函数调用问题及原因分析。。。此代码是测试使用,重点是函数调用问题。。。

开始我是这么写的,结果发现无论如何函数返回的都是0,函数如下

文件test.txt的内容如下:

也就是,即使我现在输入haha或者houhou或者heihei,它还是提示“none,you can add it!!”,这是怎么回事,我上网搜了下原来powershell的函数调用不用加括号,直接在函数后面写参数就行了。。于是,我将第18行改成了if(Exists $t,$a  -eq 1),发现结果还是不对,然后查了好多有关powershell调用的资料,资料上说调用时可以指定要传的具体的形参和实参的对应值,我尝试了一下,将它改为:

if(Exists -temp $t, -array $a  -eq 1),哈哈真可以了,好神,,结果如下:

运行结果是:

输入gaga的结果是:

    

 

然后我仔细又分析了下,其实一开始错误是有原因的,因为powershell有时候强大的让人窒息,它能把文件一行一行的读出来自动存储在一个数组中,然后按照索引进行访问,能将一些变量自动归为一组,就像这个例子,调用的时候由于没有指定形参,于是将传入的两个值$t和$a当成一个参数数组传给Exists函数的第一个参数$temp了,这样$array是空值,所以根本不执行foreach,直接返回0了。这里,我深深的感慨一下,powershell中的变量是弱类型的,当然这也是所有脚本语言的共同特点,即没有类型的限制,不用考虑是否有数组溢出、数组类型不匹配等头疼问题。也很方便,任何变量可以不指定类型,直接拿来用了,不然这里怎么会把$temp当成数组呢,即$a这个东西可能是一个整型、一个字符串、一个数组。。。。。。所以这样的话,您就别指望它报错了。

    所以,以防万一,在函数调用时,还是老老实实的指定实参是传给哪个形参吧。进入写函数的时候又没有再出现过这个问题了,很奇怪。

作者: zhoujie
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,不然我担心博客园找你算账
如果您觉得本文对你有帮助,请竖起您的大拇指右下角点推荐,也可以关注我
目录
相关文章
|
9月前
vbs ShellExecute运行外部程序时判断外部程序执行成功与否方法
vbs ShellExecute运行外部程序时判断外部程序执行成功与否方法
40 2
|
Shell
Shell while 语法(: 死循环)
Shell while 语法(: 死循环)
341 0
|
Shell
Shell“我自己写了个程序?”-流程控制语句
Shell“我自己写了个程序?”-流程控制语句
86 0
|
机器学习/深度学习 Shell
Shell的参数传递
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
157 0
|
Shell
SHELL中获取函数返回值
SHELL中获取函数返回值
99 0
|
JavaScript iOS开发 前端开发