2010-08-06 20:51:52 +05:30
|
|
|
# This testcase demonstrates that backslashes are treated differently
|
|
|
|
# in 1st and 2nd parts of ${var/search/repl}:
|
2010-08-06 22:58:04 +05:30
|
|
|
# if quoted ("${var/search/repl}"), and repl contains \a (a non-special char),
|
|
|
|
# the backslash in repl stays; if unquoted, backslash is removed.
|
2010-08-06 20:51:52 +05:30
|
|
|
# But search part does not act like that: \a is always converted to just a,
|
|
|
|
# even in quotes.
|
|
|
|
#
|
2010-08-06 22:58:04 +05:30
|
|
|
# bash4 (and probably bash3 too): "Quoted:" results are different from
|
2016-10-02 21:38:04 +05:30
|
|
|
# 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.
|
2010-08-06 20:51:52 +05:30
|
|
|
|
|
|
|
v='a*b\*c'
|
|
|
|
echo 'Source: ' "$v"
|
|
|
|
echo 'Replace str: ' '_\\_\z_'
|
|
|
|
|
|
|
|
echo 'Pattern: ' 'single backslash and star: "replace literal star"'
|
|
|
|
echo 'Unquoted: ' ${v/\*/_\\_\z_}
|
2016-10-02 21:38:04 +05:30
|
|
|
r=${v/\*/_\\_\z_}
|
|
|
|
echo 'Unquoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
echo 'Quoted: ' "${v/\*/_\\_\z_}"
|
2016-10-02 21:38:04 +05:30
|
|
|
r="${v/\*/_\\_\z_}"
|
|
|
|
echo 'Quoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
|
|
|
|
echo 'Pattern: ' 'double backslash and star: "replace backslash and everything after it"'
|
|
|
|
echo 'Unquoted: ' ${v/\\*/_\\_\z_}
|
2016-10-02 21:38:04 +05:30
|
|
|
r=${v/\\*/_\\_\z_}
|
|
|
|
echo 'Unquoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
echo 'Quoted: ' "${v/\\*/_\\_\z_}"
|
2016-10-02 21:38:04 +05:30
|
|
|
r="${v/\\*/_\\_\z_}"
|
|
|
|
echo 'Quoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
|
|
|
|
echo
|
|
|
|
|
|
|
|
v='a\bc'
|
|
|
|
echo 'Source: ' "$v"
|
|
|
|
echo 'Replace str: ' '_\\_\z_'
|
|
|
|
|
2010-08-08 01:54:36 +05:30
|
|
|
echo 'Pattern: ' 'single backslash and b: "replace b"'
|
2010-08-06 20:51:52 +05:30
|
|
|
echo 'Unquoted: ' ${v/\b/_\\_\z_}
|
2016-10-02 21:38:04 +05:30
|
|
|
r=${v/\b/_\\_\z_}
|
|
|
|
echo 'Unquoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
echo 'Quoted: ' "${v/\b/_\\_\z_}"
|
2016-10-02 21:38:04 +05:30
|
|
|
r="${v/\b/_\\_\z_}"
|
|
|
|
echo 'Quoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
|
|
|
|
echo 'Pattern: ' 'double backslash and b: "replace backslash and b"'
|
|
|
|
echo 'Unquoted: ' ${v/\\b/_\\_\z_}
|
2016-10-02 21:38:04 +05:30
|
|
|
r=${v/\\b/_\\_\z_}
|
|
|
|
echo 'Unquoted =: ' "$r"
|
2010-08-06 20:51:52 +05:30
|
|
|
echo 'Quoted: ' "${v/\\b/_\\_\z_}"
|
2016-10-02 21:38:04 +05:30
|
|
|
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"
|
2010-08-06 20:51:52 +05:30
|
|
|
|
|
|
|
echo
|
|
|
|
|
2010-08-05 20:49:27 +05:30
|
|
|
echo Done: $?
|