func && operation_yes || operation_no (Shell)

來源:互聯網
上載者:User

標籤:

  通過&&, || 理解shell中的函數傳回值。

  我想實現如下功能:

  寫一個函數判斷一個字串中是否只包含數字,並返回相應的標誌(是/否);

  通過調用上面的函數,判斷給定的字串是否只包含數字,根據傳回值做不同的處理。

  問題出現了,當只包含數字時我讓函數返回1(想用1表示真),否則返回0.

  然後通過func && operation_yes || operation_no.結果就出現了判斷情況正好相反的現象。

  原因就是我對shell函數的傳回值按照C/C++,Python,Java...的方式理解了,而正確的理解是:

  Bash functions, unlike functions in most programming languages do not allow you to return a value to the

caller. When a bash function ends its return value is its status: zero for success, non-zero for failure.

通過下面的func2理解這種現象(下面的代碼是能夠正確判斷的版本,正好判斷相反的版本,就是對func2中return

0和1進行調換即可):

#!/bin/bash#File: demo.sh#Author: lxw#Time: 2014-12-21func1(){    echo "-----------123a-----------------------"    [ -z $(echo "123a"|sed ‘s/[0-9]//g‘) ] && echo "all digits" || echo "not all digits"}func2(){    echo "-----------123-----------------------"    [ -z $(echo "123"|sed ‘s/[0-9]//g‘) ] && return 0 || return 1    #                        return value:    0_yes         1_no}func1echo "func1() returns" $?func2#函數的傳回值實際上就是函數的退出狀態echo "func2() returns" $?func2 && echo "all digits" || echo "not all digits"

  所以當執行最後一條語句時,&&,||根據func2函數的執行狀態,決定執行哪部分代碼。

執行結果:

-----------123a-----------------------not all digitsfunc1() returns 0-----------123-----------------------func2() returns 0-----------123-----------------------all digits

 

func && operation_yes || operation_no (Shell)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.