return 返回的是狀態碼, return不返回函數返回值 可以在前面用 echo 返回函數返回值,return 返回指定函數退出狀態碼
echo 返回的是函數返回值,如果沒有使用return,則函數退出狀態碼是函數最后一條命令的退出狀態碼
return后面的語句將不再執行
#!/bin/bash
function fn(){
a=$1
b=$2
c=$3
echo bbbbbbbb
return 233
}
ret=`fn`
echo $?
echo $ret
return返回的狀態碼不能賦予變量,只能用$?獲取,上圖方式可以同時獲取返回值和狀態碼,返回值賦予變量ret,狀態碼由$?獲取
就bash而言, return命令只能用在函數中,不能直接用在腳本中,return返回值介於[0,255],超出從0重新計算
內置命令return用於從函數中返回, ..., return命令在函數中不是必須的,函數被調用時,函數內的命令執行完成后自然會返回到調用它的地方(一般是返回到主程序)。如果某函數中有return命令,執行到return時就返回。如果return在函數中不是最后一條命令,那么return后面的其他命令不再執行
#!/bin/bash
function fn(){
a=$1
b=$2
c=$3
echo $a
echo $b
echo $c
return 256
}
ret=$(fn aa bb cc)
echo "ret="$ret
ret=$(fn aa bb cc dd ee ff)
echo "ret="$ret
if [[ $ret =~ ee ]];then
echo ret include ee
else
echo ret don\'t include ee
fi
ret=`fn`
echo $?
echo "ret="$ret
~
#!/bin/sh
function fn(){
count=0
for p in {1..3};do
count=$((count+p))
done
return $count
}
ret=`fn`
echo $?
echo "ret="$ret
echo 通過輸出到標准輸出返回。因為子進程會繼承父進程的標准輸出,因此,子進程的輸出也就直接反應到父進程。
#!/bin/sh
function test()
{
echo "arg1 = $1"
if [ $1 = "1" ] ;then
echo "19010"
else
echo "0"
fi
}
echo
echo "test 1"
vul=$(test 1)
echo $vul
~
如果沒有引號, shell會將變量使用 IFS 分割, 將分割后的參數列表傳遞給 echo, IFS 默認為空格( 空格, tab, \n )