1 |
# |
2 |
# Tests for the blog. |
3 |
# |
4 |
# Fun game: try to come up with an expression that behaves differently on ALL |
5 |
# FOUR shells. |
6 |
|
7 |
#### ${##} |
8 |
set -- $(seq 25) |
9 |
echo ${##} |
10 |
## stdout: 2 |
11 |
|
12 |
#### ${###} |
13 |
set -- $(seq 25) |
14 |
echo ${###} |
15 |
## stdout: 25 |
16 |
## N-I osh stdout-json: "" |
17 |
## N-I osh status: 2 |
18 |
|
19 |
#### ${####} |
20 |
set -- $(seq 25) |
21 |
echo ${####} |
22 |
## stdout: 25 |
23 |
## N-I osh stdout-json: "" |
24 |
## N-I osh status: 2 |
25 |
|
26 |
#### ${##2} |
27 |
set -- $(seq 25) |
28 |
echo ${##2} |
29 |
## stdout: 5 |
30 |
## N-I osh stdout-json: "" |
31 |
## N-I osh status: 2 |
32 |
|
33 |
#### ${###2} |
34 |
set -- $(seq 25) |
35 |
echo ${###2} |
36 |
## stdout: 5 |
37 |
## BUG mksh stdout: 25 |
38 |
## N-I osh stdout-json: "" |
39 |
## N-I osh status: 2 |
40 |
|
41 |
#### ${1####} |
42 |
set -- '####' |
43 |
echo ${1####} |
44 |
## stdout: ## |
45 |
|
46 |
#### ${1#'###'} |
47 |
set -- '####' |
48 |
echo ${1#'###'} |
49 |
## stdout: # |
50 |
|
51 |
#### ${#1#'###'} |
52 |
set -- '####' |
53 |
echo ${#1#'###'} |
54 |
# dash and zsh accept; mksh/bash/osh don't. |
55 |
## status: 2 |
56 |
## stdout-json: "" |
57 |
## OK dash/zsh status: 0 |
58 |
## OK dash stdout: 4 |
59 |
## OK zsh stdout: 1 |
60 |
## N-I bash/mksh status: 1 |
61 |
|
62 |
#### Julia example from spec/oil-user-feedback |
63 |
|
64 |
case $SH in (dash|mksh|zsh) exit ;; esac |
65 |
|
66 |
git-branch-merged() { |
67 |
cat <<EOF |
68 |
foo |
69 |
* bar |
70 |
baz |
71 |
master |
72 |
EOF |
73 |
} |
74 |
|
75 |
shopt -s lastpipe # required for bash, not OSH |
76 |
|
77 |
branches=() # dangerous when set -e is on |
78 |
git-branch-merged | while read -r line; do |
79 |
line=${line# *} # strip leading spaces |
80 |
if [[ $line != 'master' && ! ${line:0:1} == '*' ]]; then |
81 |
branches+=("$line") |
82 |
fi |
83 |
done |
84 |
|
85 |
if [[ ${#branches[@]} -eq 0 ]]; then |
86 |
echo "No merged branches" |
87 |
else |
88 |
echo git branch -D "${branches[@]}" |
89 |
fi |
90 |
|
91 |
## STDOUT: |
92 |
git branch -D foo baz |
93 |
## END |
94 |
## N-I dash/mksh/zsh STDOUT: |
95 |
## END |