D1349.trap-return.sh (1361B)
1 #!/bin/bash 2 3 ( 4 trap 'echo "RETURN:$BASH_COMMAND:[$FUNCNAME]"' RETURN 5 function f1 { 6 echo A 7 } 8 function f2 { 9 echo B 10 return 0 11 } 12 f1; f2 13 14 set -T 15 f1; f2 16 set +T 17 18 declare -ft f1 f2 19 f1; f2 20 ) 21 22 echo ------------------------------------------------------------------------------ 23 ( 24 function ret { local count=0; return 1; } 25 trap 'echo RETURN:$BASH_COMMAND; [[ $FUNCNAME == ret ]] && ((count++==0)) && return 2' RETURN 26 function f1 { 27 ret 28 echo "exit=$?" 29 } 30 set -T 31 f1 32 ) 33 34 echo ------------------------------------------------------------------------------ 35 # continue/break の引数 36 # 実際に抜けられるループ数よりも大きな数を指定すると全てのループを抜ける。 37 # 呼び出し元の関数にあるループを抜けるという事はない。 38 39 function f1 { 40 local i 41 for i in {0..2}; do 42 echo "f1#$i:BEGIN" 43 f2 44 echo "f1#$i:END" 45 done 46 } 47 48 function f2 { 49 local i 50 for i in {0..2}; do 51 echo "f2#$i:BEGIN" 52 break 2 53 #continue 2 54 echo "f2#$i:END" 55 done 56 } 57 58 f1 59 60 echo ------------------------------------------------------------------------------ 61 echo 'RETURN in trap' 62 63 ( 64 set -T 65 function f1 { 66 return 123 67 } 68 function handler { 69 echo handler 70 trap 'echo return Handler' RETURN 71 f1 72 return 321 73 } 74 75 trap handler RETURN 76 f1 77 78 trap handler DEBUG 79 f1 80 )