123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # 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: $?
|