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