hush/shell/ash_test/ash-vars/var_bash4.tests

48 lines
1.4 KiB
Plaintext
Raw Normal View History

# 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 and assignment expansions - they have a backslash before z.
v='a*b\*c'
echo 'Source: ' "$v"
echo 'Replace str: ' '_\\_\z_'
echo 'Pattern: ' 'single backslash and star: "replace literal star"'
r=${v/\*/_\\_\z_}
echo 'In assignment:' "$r"
echo 'Unquoted: ' ${v/\*/_\\_\z_}
echo 'Quoted: ' "${v/\*/_\\_\z_}"
echo 'Pattern: ' 'double backslash and star: "replace backslash and everything after it"'
r=${v/\\*/_\\_\z_}
echo 'In assignment:' "$r"
echo 'Unquoted: ' ${v/\\*/_\\_\z_}
echo 'Quoted: ' "${v/\\*/_\\_\z_}"
echo
v='a\bc'
echo 'Source: ' "$v"
echo 'Replace str: ' '_\\_\z_'
echo 'Pattern: ' 'single backslash and b: "replace b"'
r=${v/\b/_\\_\z_}
echo 'In assignment:' "$r"
echo 'Unquoted: ' ${v/\b/_\\_\z_}
echo 'Quoted: ' "${v/\b/_\\_\z_}"
echo 'Pattern: ' 'double backslash and b: "replace backslash and b"'
r=${v/\\b/_\\_\z_}
echo 'In assignment:' "$r"
echo 'Unquoted: ' ${v/\\b/_\\_\z_}
echo 'Quoted: ' "${v/\\b/_\\_\z_}"
echo
echo Done: $?