summaryrefslogtreecommitdiffhomepage
path: root/shell/hush_test/hush-vars/var_bash4.tests
blob: 32aa2b34ce48098f3420912c0a89d2fb49b47a8a (plain)
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
# This testcase demonstrates that backslashes are treated differently
# in 1st and 2nd parts of ${var/search/repl}:
# if quoted ("${var/search/repl}"), and repl contains \a (a non-special char),
# the backslash in repl stays; if unquoted, backslash is removed.
# But search part does not act like that: \a is always converted to just a,
# even in quotes.
#
# bash4 (and probably bash3 too): "Quoted:" results are different from
# unquoted expansions - they have a backslash before z.
#
# The difference only exists if repl is a literal. If it is a variable:
# ${v/.../$s}, then all backslashes are preserved in both cases.

v='a*b\*c'
echo 'Source:       ' "$v"
echo 'Replace str:  ' '_\\_\z_'

echo 'Pattern:      ' 'single backslash and star: "replace literal star"'
echo 'Unquoted:     ' ${v/\*/_\\_\z_}
r=${v/\*/_\\_\z_}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\*/_\\_\z_}"
r="${v/\*/_\\_\z_}"
echo 'Quoted =:     ' "$r"

echo 'Pattern:      ' 'double backslash and star: "replace backslash and everything after it"'
echo 'Unquoted:     '  ${v/\\*/_\\_\z_}
r=${v/\\*/_\\_\z_}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\\*/_\\_\z_}"
r="${v/\\*/_\\_\z_}"
echo 'Quoted =:     ' "$r"

echo

v='a\bc'
echo 'Source:       ' "$v"
echo 'Replace str:  ' '_\\_\z_'

echo 'Pattern:      ' 'single backslash and b: "replace b"'
echo 'Unquoted:     '  ${v/\b/_\\_\z_}
r=${v/\b/_\\_\z_}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\b/_\\_\z_}"
r="${v/\b/_\\_\z_}"
echo 'Quoted =:     ' "$r"

echo 'Pattern:      ' 'double backslash and b: "replace backslash and b"'
echo 'Unquoted:     '  ${v/\\b/_\\_\z_}
r=${v/\\b/_\\_\z_}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\\b/_\\_\z_}"
r="${v/\\b/_\\_\z_}"
echo 'Quoted =:     ' "$r"

echo

v='a\bc'
s='_\\_\z_'
echo 'Source:       ' "$v"
echo 'Replace str:  ' "$s" '(as variable $s)'

echo 'Pattern:      ' 'single backslash and b: "replace b"'
echo 'Unquoted:     '  ${v/\b/$s}
r=${v/\b/$s}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\b/$s}"
r="${v/\b/$s}"
echo 'Quoted =:     ' "$r"

echo 'Pattern:      ' 'double backslash and b: "replace backslash and b"'
echo 'Unquoted:     '  ${v/\\b/$s}
r=${v/\\b/$s}
echo 'Unquoted =:   ' "$r"
echo 'Quoted:       ' "${v/\\b/$s}"
r="${v/\\b/$s}"
echo 'Quoted =:     ' "$r"

echo

echo Done: $?