diff options
-rw-r--r-- | shell/ash_test/ash-vars/var_bash4.right | 25 | ||||
-rwxr-xr-x | shell/ash_test/ash-vars/var_bash4.tests | 51 |
2 files changed, 68 insertions, 8 deletions
diff --git a/shell/ash_test/ash-vars/var_bash4.right b/shell/ash_test/ash-vars/var_bash4.right index fc3a9e41c..2d4e45be8 100644 --- a/shell/ash_test/ash-vars/var_bash4.right +++ b/shell/ash_test/ash-vars/var_bash4.right @@ -1,4 +1,23 @@ -In assignment: a*b-backslashstar- -Unquoted: a*b-backslashstar- -Quoted: a*b-backslashstar- +Source: a*b\*c +Replace str: _\\_\z_ +Pattern: single backslash and star: "replace literal star" +In assignment: a_\_z_b\*c +Unquoted: a_\_z_b\*c +Quoted: a_\_\z_b\*c +Pattern: double backslash and star: "replace backslash and everything after it" +In assignment: a*b_\_z_ +Unquoted: a*b_\_z_ +Quoted: a*b_\_\z_ + +Source: a\bc +Replace str: _\\_\z_ +Pattern: single backslash and b: "replace literal b" +In assignment: a\_\_z_c +Unquoted: a\_\_z_c +Quoted: a\_\_\z_c +Pattern: double backslash and b: "replace backslash and b" +In assignment: a_\_z_c +Unquoted: a_\_z_c +Quoted: a_\_\z_c + Done: 0 diff --git a/shell/ash_test/ash-vars/var_bash4.tests b/shell/ash_test/ash-vars/var_bash4.tests index 3b323c576..01a0def51 100755 --- a/shell/ash_test/ash-vars/var_bash4.tests +++ b/shell/ash_test/ash-vars/var_bash4.tests @@ -1,6 +1,47 @@ -FOO='a*b\*c' -BAR=${FOO//\\*/-backslashstar-} -echo In assignment: "$BAR" -echo Unquoted: ${FOO//\\*/-backslashstar-} -echo Quoted: "${FOO//\\*/-backslashstar-}" +# 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: removed +# But search part does not act like that: \a is always converted to just a, +# even in quotes. +# +# bash4 (and probably bash3 too) result: "Quoted:" results are different - +# they have extra 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 literal 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: $? |