標籤:
通過&&, || 理解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)