1 |
#!/usr/bin/env bash |
2 |
|
3 |
#### Remove const suffix |
4 |
v=abcd |
5 |
echo ${v%d} ${v%%cd} |
6 |
## stdout: abc ab |
7 |
|
8 |
#### Remove const prefix |
9 |
v=abcd |
10 |
echo ${v#a} ${v##ab} |
11 |
## stdout: bcd cd |
12 |
|
13 |
#### Remove const suffix is vectorized on user array |
14 |
a=(1a 2a 3a) |
15 |
argv.py ${a[@]%a} |
16 |
## stdout: ['1', '2', '3'] |
17 |
## status: 0 |
18 |
## N-I dash/mksh stdout-json: "" |
19 |
## N-I dash status: 2 |
20 |
## N-I mksh status: 1 |
21 |
|
22 |
#### Remove const suffix is vectorized on $@ array |
23 |
set -- 1a 2a 3a |
24 |
argv.py ${@%a} |
25 |
## stdout: ['1', '2', '3'] |
26 |
## status: 0 |
27 |
## N-I dash stdout: ['1a', '2a', '3'] |
28 |
## N-I dash status: 0 |
29 |
## N-I mksh stdout-json: "" |
30 |
## N-I mksh status: 1 |
31 |
|
32 |
#### Remove const suffix from undefined |
33 |
echo ${undef%suffix} |
34 |
## stdout: |
35 |
|
36 |
#### Remove shortest glob suffix |
37 |
v=aabbccdd |
38 |
echo ${v%c*} |
39 |
## stdout: aabbc |
40 |
|
41 |
#### Remove longest glob suffix |
42 |
v=aabbccdd |
43 |
echo ${v%%c*} |
44 |
## stdout: aabb |
45 |
|
46 |
#### Remove shortest glob prefix |
47 |
v=aabbccdd |
48 |
echo ${v#*b} |
49 |
## stdout: bccdd |
50 |
|
51 |
#### Remove longest glob prefix |
52 |
v=aabbccdd |
53 |
echo ${v##*b} |
54 |
## stdout: ccdd |
55 |
|
56 |
#### Strip char class |
57 |
v=abc |
58 |
echo ${v%[[:alpha:]]} |
59 |
## stdout: ab |
60 |
## N-I mksh stdout: abc |
61 |
|
62 |
#### Strip unicode prefix |
63 |
# NOTE: LANG is set to utf-8. Problem: there is no way to represent the |
64 |
# invalid character! Instead of stdout-json, how about stdout-bytes? |
65 |
v='μ-' |
66 |
echo ${v#?} # ? is a glob that stands for one character |
67 |
## stdout: - |
68 |
## BUG dash/mksh stdout-repr: '\xbc-\n' |
69 |
## BUG zsh stdout-repr: '\n' |
70 |
|
71 |
#### Bug fix: Test that you can remove everything with glob |
72 |
s='--x--' |
73 |
argv.py "${s%%-*}" "${s%-*}" "${s#*-}" "${s##*-}" |
74 |
## STDOUT: |
75 |
['', '--x-', '-x--', ''] |
76 |
## END |
77 |
|
78 |
#### Test that you can remove everything with const |
79 |
s='abcd' |
80 |
argv.py "${s%%abcd}" "${s%abcd}" "${s#abcd}" "${s##abcd}" |
81 |
# failure case: |
82 |
argv.py "${s%%abcde}" "${s%abcde}" "${s#abcde}" "${s##abcde}" |
83 |
## STDOUT: |
84 |
['', '', '', ''] |
85 |
['abcd', 'abcd', 'abcd', 'abcd'] |
86 |
## END |
87 |
|
88 |
|
89 |
|