aboutsummaryrefslogtreecommitdiff
path: root/shell/hush_test/hush-vars/var_bash4.tests
diff options
context:
space:
mode:
Diffstat (limited to 'shell/hush_test/hush-vars/var_bash4.tests')
-rwxr-xr-xshell/hush_test/hush-vars/var_bash4.tests47
1 files changed, 47 insertions, 0 deletions
diff --git a/shell/hush_test/hush-vars/var_bash4.tests b/shell/hush_test/hush-vars/var_bash4.tests
new file mode 100755
index 000000000..d5470614b
--- /dev/null
+++ b/shell/hush_test/hush-vars/var_bash4.tests
@@ -0,0 +1,47 @@
+# 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: $?