diff options
author | Denys Vlasenko | 2010-09-05 14:45:38 +0200 |
---|---|---|
committer | Denys Vlasenko | 2010-09-05 14:47:58 +0200 |
commit | 36f774a0cd2bf8dd72b192aab93831c5ac0c58f0 (patch) | |
tree | afa0b3d247e4dd163b89b7b61f4e3e0f3143b102 /shell/hush_test/hush-vars/var_bash4.tests | |
parent | 701e127f7d892909a58c6f3333e23588ccef9e22 (diff) | |
download | busybox-36f774a0cd2bf8dd72b192aab93831c5ac0c58f0.zip busybox-36f774a0cd2bf8dd72b192aab93831c5ac0c58f0.tar.gz |
hush: add support for ${var/pattern/repl}, conditional on bash compat
function old new delta
expand_vars_to_list 2386 2833 +447
expand_string_to_string 69 110 +41
parse_dollar 681 721 +40
hush_main 963 945 -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 528/-18) Total: 510 bytes
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'shell/hush_test/hush-vars/var_bash4.tests')
-rwxr-xr-x | shell/hush_test/hush-vars/var_bash4.tests | 47 |
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 0000000..d547061 --- /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: $? |