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