zoukankan      html  css  js  c++  java
  • 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这个东西可能是一个整型、一个字符串、一个数组。。。。。。所以这样的话,您就别指望它报错了。

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

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/zhoujie/p/Powershell_called.html
Copyright © 2011-2022 走看看