fish-shell/tests/checks/cmdsub.fish
Johannes Altmanninger 4a575b26f5 Fix error check for repeated quoted command substitution
Commit e40eba358 (Treat text following quoted command substitution
as quoted) made parse_util_locate_cmdsubst_range() aware of quoted
command substitutions, by skipping surrounding text via quote_end().

However, it was not quite right. We fail to properly parse
two consecutive command substitutions in the same string,
because we don't maintain the quoting context across calls to
parse_util_locate_cmdsubst_range().  Let's track that bit in a
parameter. This allows us to get rid of the quote_end() hack.

Also apply this to the other place where we call
parse_util_locate_cmdsubst_range() in a loop (highlighting).

Fixes #8500
2021-12-04 16:56:07 +01:00

66 lines
1.3 KiB
Fish

#RUN: %fish %s
echo $(echo 1\n2)
# CHECK: 1 2
# Command substitution inside double quotes strips trailing newline.
echo "a$(echo b)c"
# CHECK: abc
# Nesting
echo "$(echo "$(echo a)")"
# CHECK: a
echo "$(echo $(echo b))"
# CHECK: b
echo "$(echo multiple).$(echo command).$(echo substitutions)"
# CHECK: multiple.command.substitutions
test -n "$()" || echo "empty list is interpolated to empty string"
# CHECK: empty list is interpolated to empty string
# Variables in command substitution output are not expanded.
echo "$(echo \~ \$HOME)"
# CHECK: ~ $HOME
echo "$(printf %s 'quoted command substitution multiline output
line 2
line 3
')"
# CHECK: quoted command substitution multiline output
# CHECK: line 2
# CHECK: line 3
echo trim any newlines "$(echo \n\n\n)" after cmdsub
#CHECK: trim any newlines after cmdsub
echo i{1, (echo 2), "$(echo 3)"}
# CHECK: i1 i2 i3
echo "$(echo index\nrange\nexpansion)[2]"
#CHECK: range
echo "$(echo '"')"
#CHECK: "
echo "$(echo $(echo 1) ())"
#CHECK: 1
echo "$(echo 1))"
# CHECK: 1)
echo "($(echo 1))"
# CHECK: (1)
echo "$(echo 1) ( $(echo 2)"
# CHECK: 1 ( 2
echo "$(echo A)B$(echo C)D"(echo E)
# CHECK: ABCDE
echo "($(echo A)B$(echo C))"
# CHECK: (ABC)
echo "quoted1""quoted2"(echo unquoted3)"$(echo quoted4)_$(echo quoted5)"
# CHECK: quoted1quoted2unquoted3quoted4_quoted5