hush: fix backslash and terminator handling in <<[-]["]heredoc["]
function old new delta parse_stream 2339 2395 +56 expand_pseudo_dquoted 104 118 +14 parse_stream_dquoted 296 300 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 74/0) Total: 74 bytes Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
27
shell/hush_test/hush-misc/heredoc_backslash1.right
Normal file
27
shell/hush_test/hush-misc/heredoc_backslash1.right
Normal file
@@ -0,0 +1,27 @@
|
||||
Quoted heredoc:
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
|
||||
Unquoted heredoc:
|
||||
a b
|
||||
123456 -qwerty-\t-\-\"-\'-`-\--\z-\*-\?-
|
||||
-qwerty-\t-\-\"-\'-`-\--\z-\*-\?-
|
||||
cEOF2
|
||||
|
||||
Quoted -heredoc:
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
|
||||
Unquoted -heredoc:
|
||||
a b
|
||||
123456 -qwerty-\t-\-\"-\'-`-\--\z-\*-\?-
|
||||
-qwerty-\t-\-\"-\'-`-\--\z-\*-\?-
|
||||
cEOF4
|
||||
|
||||
Done: 0
|
54
shell/hush_test/hush-misc/heredoc_backslash1.tests
Executable file
54
shell/hush_test/hush-misc/heredoc_backslash1.tests
Executable file
@@ -0,0 +1,54 @@
|
||||
# Test for correct handling of backslashes.
|
||||
# Note that some lines in each heredoc start with a tab.
|
||||
|
||||
a=qwerty
|
||||
|
||||
echo Quoted heredoc:
|
||||
cat <<"EOF1"
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
EOF1
|
||||
echo
|
||||
|
||||
echo Unquoted heredoc:
|
||||
cat <<EOF2
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
EOF2
|
||||
EOF2
|
||||
echo
|
||||
|
||||
echo Quoted -heredoc:
|
||||
cat <<-"EOF3"
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
EOF3
|
||||
# In -heredoc case the marker is detected even if it is indented.
|
||||
echo
|
||||
|
||||
echo Unquoted -heredoc:
|
||||
cat <<-EOF4
|
||||
a\
|
||||
b
|
||||
123456 -$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
-$a-\t-\\-\"-\'-\`-\--\z-\*-\?-
|
||||
c\
|
||||
EOF4
|
||||
EOF4
|
||||
# The marker is not detected if preceding line ends in backslash.
|
||||
# TODO: marker should be detected even if it is split by line continuation:
|
||||
# EOF\
|
||||
# 4
|
||||
# but currently hush doesn't do it. (Tab before "4" is not allowed, though.)
|
||||
echo
|
||||
|
||||
echo "Done: $?"
|
Reference in New Issue
Block a user