diff options
-rw-r--r-- | shell/ash_test/ash-parsing/comment2.right | 4 | ||||
-rwxr-xr-x | shell/ash_test/ash-parsing/comment2.tests | 13 | ||||
-rw-r--r-- | shell/hush.c | 17 | ||||
-rw-r--r-- | shell/hush_test/hush-parsing/comment2.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-parsing/comment2.tests | 13 |
5 files changed, 47 insertions, 4 deletions
diff --git a/shell/ash_test/ash-parsing/comment2.right b/shell/ash_test/ash-parsing/comment2.right new file mode 100644 index 0000000..ee6e49a --- /dev/null +++ b/shell/ash_test/ash-parsing/comment2.right @@ -0,0 +1,4 @@ +Ok1 +Ok2 +Ok5 +Ok6 diff --git a/shell/ash_test/ash-parsing/comment2.tests b/shell/ash_test/ash-parsing/comment2.tests new file mode 100755 index 0000000..b7adad9 --- /dev/null +++ b/shell/ash_test/ash-parsing/comment2.tests @@ -0,0 +1,13 @@ +echo "`echo Ok1 #comment is ignored`" +echo `echo Ok2 #comment is ignored` +# +# Surprisingly, bash does not handle comments in $() +# the same way as in ``. "#" causes the rest of the line, _including_ )", +# to be ignored. These lines would cause an error: +#echo "$(echo Ok3 #comment is ignored)" +#echo $(echo Ok4 #comment is ignored) +# +echo "$(echo Ok5 #comment is ignored +)" +echo $(echo Ok6 #comment is ignored +) diff --git a/shell/hush.c b/shell/hush.c index d27550b..708555a 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5140,14 +5140,23 @@ static struct pipe *parse_stream(char **pstring, case '#': if (dest.length == 0 && !dest.has_quoted_part) { /* skip "#comment" */ + /* note: we do not add it to &ctx.as_string */ +/* TODO: in bash: + * comment inside $() goes to the next \n, even inside quoted string (!): + * cmd "$(cmd2 #comment)" - syntax error + * cmd "`cmd2 #comment`" - ok + * We accept both (comment ends where command subst ends, in both cases). + */ while (1) { ch = i_peek(input); - if (ch == EOF || ch == '\n') + if (ch == '\n') { + nommu_addchr(&ctx.as_string, '\n'); + break; + } + ch = i_getch(input); + if (ch == EOF) break; - i_getch(input); - /* note: we do not add it to &ctx.as_string */ } - nommu_addchr(&ctx.as_string, '\n'); continue; /* back to top of while (1) */ } break; diff --git a/shell/hush_test/hush-parsing/comment2.right b/shell/hush_test/hush-parsing/comment2.right new file mode 100644 index 0000000..ee6e49a --- /dev/null +++ b/shell/hush_test/hush-parsing/comment2.right @@ -0,0 +1,4 @@ +Ok1 +Ok2 +Ok5 +Ok6 diff --git a/shell/hush_test/hush-parsing/comment2.tests b/shell/hush_test/hush-parsing/comment2.tests new file mode 100755 index 0000000..b7adad9 --- /dev/null +++ b/shell/hush_test/hush-parsing/comment2.tests @@ -0,0 +1,13 @@ +echo "`echo Ok1 #comment is ignored`" +echo `echo Ok2 #comment is ignored` +# +# Surprisingly, bash does not handle comments in $() +# the same way as in ``. "#" causes the rest of the line, _including_ )", +# to be ignored. These lines would cause an error: +#echo "$(echo Ok3 #comment is ignored)" +#echo $(echo Ok4 #comment is ignored) +# +echo "$(echo Ok5 #comment is ignored +)" +echo $(echo Ok6 #comment is ignored +) |