File: D1349.trap-return.sh

package info (click to toggle)
ble.sh 0.4.0~git20250321.d4c812b-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 12,516 kB
  • sloc: sh: 71,367; awk: 1,316; cpp: 750; ansic: 186; javascript: 43; makefile: 35
file content (80 lines) | stat: -rw-r--r-- 1,361 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash

(
  trap 'echo "RETURN:$BASH_COMMAND:[$FUNCNAME]"' RETURN
  function f1 {
    echo A
  }
  function f2 {
    echo B
    return 0
  }
  f1; f2

  set -T
  f1; f2
  set +T

  declare -ft f1 f2
  f1; f2
)

echo ------------------------------------------------------------------------------
(
  function ret { local count=0; return 1; }
  trap 'echo RETURN:$BASH_COMMAND; [[ $FUNCNAME == ret ]] && ((count++==0)) && return 2' RETURN
  function f1 {
    ret
    echo "exit=$?"
  }
  set -T
  f1
)

echo ------------------------------------------------------------------------------
# continue/break の引数
# 実際に抜けられるループ数よりも大きな数を指定すると全てのループを抜ける。
# 呼び出し元の関数にあるループを抜けるという事はない。

function f1 {
  local i
  for i in {0..2}; do
    echo "f1#$i:BEGIN"
    f2
    echo "f1#$i:END"
  done
}

function f2 {
  local i
  for i in {0..2}; do
    echo "f2#$i:BEGIN"
    break 2
    #continue 2
    echo "f2#$i:END"
  done
}

f1

echo ------------------------------------------------------------------------------
echo 'RETURN in trap'

(
  set -T
  function f1 {
    return 123
  }
  function handler {
    echo handler
    trap 'echo return Handler' RETURN
    f1
    return 321
  }

  trap handler RETURN
  f1

  trap handler DEBUG
  f1
)