File: D2051.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 (100 lines) | stat: -rwxr-xr-x 2,665 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env bash

contexts=('echo $((%s))' 'echo $[%s]' '((%s))' 'b[%s]=' ': ${b[%s]}' 'b=([%s]=)' ': ${v:%s}' ': "${v:%s}"')
quote_types=('\10' "'10'" "\$'10'" '"10"' '$"10"' 'a[\10]' 'a["10"]' '`echo 10`')

function test-quote-error {
  local cmd
  printf -v cmd "$1" "$2"
  [[ ! $(eval "$cmd" 2>&1 1>/dev/null) ]]
}

function sub:test-compact {
  local v=1

  local t q cmd vec
  for t in "${contexts[@]}"; do
    vec=
    for q in "${quote_types[@]}"; do
      if test-quote-error "$t" "$q"; then
        vec+=o
      else
        vec+=x
      fi
    done
    printf -v cmd "$t" expr
    printf "%-20s: %s\n" "$cmd" "$vec"
  done
}

function sub:summarize-compact {
  printf '%-20s: 4.3     4.4     5.1     5.2     dev\n'
  paste \
    -d ' ' \
    <(bash-4.3 "$0" test-compact) \
    <(bash-4.4 "$0" test-compact | sed 's/.* \([ox]\{1,\}\)$/\1/') \
    <(bash-5.1 "$0" test-compact | sed 's/.* \([ox]\{1,\}\)$/\1/') \
    <(bash-5.2 "$0" test-compact | sed 's/.* \([ox]\{1,\}\)$/\1/') \
    <(bash-dev "$0" test-compact | sed 's/.* \([ox]\{1,\}\)$/\1/')
}

function sub:perform-test {
  local v=1

  local t q cmd vec
  for t in "${contexts[@]}"; do
    for q in "${quote_types[@]}"; do
      printf -v cmd "$t" "$q"
      if test-quote-error "$t" "$q"; then
        vec=o
      else
        vec=x
      fi
      printf "%-20s: %s\n" "$cmd" "$vec"
    done
  done
}

function main {
  printf '%-20s: 4.3 4.4 5.1 5.2 dev\n' COMMAND
  paste \
    -d ' ' \
    <(bash-4.3 "$0" perform-test | sed 's/.$/ & /') \
    <(bash-4.4 "$0" perform-test | sed 's/.*\([ox]\)$/ \1 /') \
    <(bash-5.1 "$0" perform-test | sed 's/.*\([ox]\)$/ \1 /') \
    <(bash-5.2 "$0" perform-test | sed 's/.*\([ox]\)$/ \1 /') \
    <(bash-dev "$0" perform-test | sed 's/.*\([ox]\)$/ \1/')
}

function sub:test-markdown {
  local v=1

  local t q cmd vec
  for t in "${contexts[@]}"; do
    for q in "${quote_types[@]}"; do
      printf -v cmd "$t" "$q"
      if test-quote-error "$t" "$q"; then
        vec='&#x2705;'
      else
        vec='&#x2B1C;'
      fi
      printf "| %-20s | %s\n" "<code>$cmd</code>" "$vec"
    done
  done
}
function sub:summarize-markdown {
  printf '| COMMAND | 3.0..4.3 | 4.4..5.0 | 5.1 | 5.2..dev |\n'
  printf '|:----------------------|:--------:|:--------:|:--------:|:--------:|\n'
  paste \
    -d '|' \
    <(bash-4.3 "$0" test-markdown) \
    <(bash-4.4 "$0" test-markdown | sed 's/.* \([^[:blank:]]\{1,\}\)$/ \1 /') \
    <(bash-5.1 "$0" test-markdown | sed 's/.* \([^[:blank:]]\{1,\}\)$/ \1 /') \
    <(bash-5.2 "$0" test-markdown | sed 's/.* \([^[:blank:]]\{1,\}\)$/ \1 |/')
}

if declare -f "sub:$1" >/dev/null; then
  "sub:$@"
else
  main
fi