PowerShell函數調用問題

來源:互聯網
上載者:User

    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這個東西可能是一個整型、一個字串、一個數組。。。。。。所以這樣的話,您就別指望它報錯了。

    所以,以防萬一,在函數調用時,還是老老實實的指定實參是傳給哪個形參吧。進入寫函數的時候又沒有再出現過這個問題了,很奇怪。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.