From b762c784caa78877a9949224af425e52db237beb Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 17 Jul 2018 14:21:38 +0200 Subject: hush: improve ${var#...}, ${var:+...} and ${var/.../...} - handle quoting dollar_altvalue1 test partially fails: word splitting of unquoted ${var:+...} is not correct function old new delta encode_then_expand_vararg - 443 +443 expand_one_var 1599 1610 +11 parse_stream 2756 2753 -3 encode_string 250 242 -8 setup_heredoc 308 298 -10 expand_and_evaluate_arith 106 96 -10 encode_then_expand_string 142 126 -16 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/5 up/down: 454/-47) Total: 407 bytes Signed-off-by: Denys Vlasenko --- shell/hush_test/hush-quoting/dollar_altvalue1.right | 16 ++++++++++++++++ shell/hush_test/hush-quoting/dollar_altvalue1.tests | 16 ++++++++++++++++ shell/hush_test/hush-quoting/dollar_repl_bash1.right | 14 ++++++++++++++ shell/hush_test/hush-quoting/dollar_repl_bash1.tests | 12 ++++++++++++ shell/hush_test/hush-quoting/squote_in_varexp.right | 4 ++++ shell/hush_test/hush-quoting/squote_in_varexp.tests | 4 ++++ shell/hush_test/hush-quoting/squote_in_varexp2.right | 2 ++ shell/hush_test/hush-quoting/squote_in_varexp2.tests | 2 ++ shell/hush_test/hush-z_slow/many_ifs.tests | 4 ++-- 9 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 shell/hush_test/hush-quoting/dollar_altvalue1.right create mode 100755 shell/hush_test/hush-quoting/dollar_altvalue1.tests create mode 100644 shell/hush_test/hush-quoting/dollar_repl_bash1.right create mode 100755 shell/hush_test/hush-quoting/dollar_repl_bash1.tests (limited to 'shell/hush_test') diff --git a/shell/hush_test/hush-quoting/dollar_altvalue1.right b/shell/hush_test/hush-quoting/dollar_altvalue1.right new file mode 100644 index 000000000..5cd495d3b --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_altvalue1.right @@ -0,0 +1,16 @@ +Unquoted b c d +|b| +|c| +|d| +Unquoted 'b c' d +|b c| +|d| +Unquoted "b c" d +|b c| +|d| +Quoted b c d +|b c d| +Quoted 'b c' d +|'b c' d| +Quoted "b c" d +|b c d| diff --git a/shell/hush_test/hush-quoting/dollar_altvalue1.tests b/shell/hush_test/hush-quoting/dollar_altvalue1.tests new file mode 100755 index 000000000..f4dc8caec --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_altvalue1.tests @@ -0,0 +1,16 @@ +f() { for i; do echo "|$i|"; done; } +x=a + +echo Unquoted b c d +f ${x:+b c d} +echo Unquoted "'b c' d" +f ${x:+'b c' d} +echo Unquoted '"b c" d' +f ${x:+"b c" d} + +echo Quoted b c d +f "${x:+b c d}" +echo Quoted "'b c' d" +f "${x:+'b c' d}" +echo Quoted '"b c" d' +f "${x:+"b c" d}" diff --git a/shell/hush_test/hush-quoting/dollar_repl_bash1.right b/shell/hush_test/hush-quoting/dollar_repl_bash1.right new file mode 100644 index 000000000..f5e9309f4 --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_repl_bash1.right @@ -0,0 +1,14 @@ +|y| +|zx| +|y| +|zx| +|y zx| +|y zx| +|y| +|zy| +|z| +|y| +|zy| +|z| +|y zy z| +|y zy z| diff --git a/shell/hush_test/hush-quoting/dollar_repl_bash1.tests b/shell/hush_test/hush-quoting/dollar_repl_bash1.tests new file mode 100755 index 000000000..912635925 --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_repl_bash1.tests @@ -0,0 +1,12 @@ +f() { for i; do echo "|$i|"; done; } +v=xx + +f ${v/'x'/"y z"} +f ${v/"x"/'y z'} +f "${v/'x'/"y z"}" +f "${v/"x"/'y z'}" + +f ${v//'x'/"y z"} +f ${v//"x"/'y z'} +f "${v//'x'/"y z"}" +f "${v//"x"/'y z'}" diff --git a/shell/hush_test/hush-quoting/squote_in_varexp.right b/shell/hush_test/hush-quoting/squote_in_varexp.right index a75c0bfd6..4a457021b 100644 --- a/shell/hush_test/hush-quoting/squote_in_varexp.right +++ b/shell/hush_test/hush-quoting/squote_in_varexp.right @@ -1,5 +1,9 @@ z z +z +z +y +y y y Ok:0 diff --git a/shell/hush_test/hush-quoting/squote_in_varexp.tests b/shell/hush_test/hush-quoting/squote_in_varexp.tests index a2d05a246..4afc52107 100755 --- a/shell/hush_test/hush-quoting/squote_in_varexp.tests +++ b/shell/hush_test/hush-quoting/squote_in_varexp.tests @@ -1,6 +1,10 @@ x=yz echo ${x#'y'} echo "${x#'y'}" +echo ${x#"y"} +echo "${x#"y"}" echo ${x%'z'} echo "${x%'z'}" +echo ${x%"z"} +echo "${x%"z"}" echo Ok:$? diff --git a/shell/hush_test/hush-quoting/squote_in_varexp2.right b/shell/hush_test/hush-quoting/squote_in_varexp2.right index 9d0add3c5..d03047024 100644 --- a/shell/hush_test/hush-quoting/squote_in_varexp2.right +++ b/shell/hush_test/hush-quoting/squote_in_varexp2.right @@ -1,3 +1,5 @@ Nothing: Nothing: +Nothing: +Nothing: Ok:0 diff --git a/shell/hush_test/hush-quoting/squote_in_varexp2.tests b/shell/hush_test/hush-quoting/squote_in_varexp2.tests index 806ad12b9..2797725cc 100755 --- a/shell/hush_test/hush-quoting/squote_in_varexp2.tests +++ b/shell/hush_test/hush-quoting/squote_in_varexp2.tests @@ -1,4 +1,6 @@ x='\\\\' printf Nothing:'%s\n' ${x#'\\\\'} printf Nothing:'%s\n' "${x#'\\\\'}" +printf Nothing:'%s\n' ${x#"\\\\\\\\"} +printf Nothing:'%s\n' "${x#"\\\\\\\\"}" echo Ok:$? diff --git a/shell/hush_test/hush-z_slow/many_ifs.tests b/shell/hush_test/hush-z_slow/many_ifs.tests index 1f5b1b3a6..cf9a89874 100755 --- a/shell/hush_test/hush-z_slow/many_ifs.tests +++ b/shell/hush_test/hush-z_slow/many_ifs.tests @@ -229,8 +229,8 @@ do '') split "$d0$f1$d1$f2$d2$f3$d3" "[2]($f1)($f2)" "($f1)($f2)" ;; ' ') ;; *) x=$f2$d2$f3$d3 - x=${x# } #was x=${x#' '} hush needs fixing for this to work - x=${x% } #was x=${x%' '} + x=${x#' '} + x=${x%' '} split "$d0$f1$d1$f2$d2$f3$d3" "[3]($f1)($f2)($f3)" "($f1)($x)" ;; esac -- cgit v1.2.3