===
Strings : expandable
===

"foo"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : empty expandable
===

""

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : expandle with braced variable
===

"foo ${toto}"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (variable
                              (braced_variable))))))))))))))))

===
Strings : expandle with subexpression
===

"foo $(iex)"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (sub_expression
                              (statement_list
                                (pipeline
                                  (command
                                    (command_name)))))))))))))))))))

===
Strings : verbatim
===

'foo'

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (verbatim_string_characters))))))))))))))

===
Strings : verbatim empty
===

''

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (verbatim_string_characters))))))))))))))

===
Strings : verbatim here string
===

@'
toto
'@

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (verbatim_here_string_characters))))))))))))))

===
Strings : verbatim here string empty
===

@'

'@

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (verbatim_here_string_characters))))))))))))))

===
Strings : expandle here string
===

@"
`$toto
"@

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_here_string_literal))))))))))))))

===
Strings : expandle here string with var
===

@"
$toto
"@

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_here_string_literal
                            (variable)))))))))))))))

===
Strings : expandle here string empty
===

@"

"@

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_here_string_literal))))))))))))))


===
Strings : escape variable and print dollar
===

"`$w$ is valid"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))


===
Strings : concat var content and dollar
===

"$w$ is valid"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (variable)))))))))))))))

===
Strings : Single-quoted string
===

'Hello, &!@#(&)!I_@U!JJ!EN@!'

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (verbatim_string_characters))))))))))))))

===
Strings : Double-quoted string
===

"Hello friend! !@!_(@FK@L!:D<!LQ!W(EK!_#(KQ!(%*(@!)"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : Variable substituted string
===

"Hi $person"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (variable)))))))))))))))

===
Strings : Brace-variable substituted string
===

"He was ${adjective}able"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (variable
                              (braced_variable))))))))))))))))

===
Strings : Escaped variable in double quoted string
===

"In the `$money"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : Escaped brace variable in double quoted string
===

"In the `${money}"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : Regexp
===

".*\$.*$"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))

===
Strings : Avoid comments
===

"# #"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal))))))))))))))


===
Strings : Avoid comments 2
===

"# $foo #"

---

(program
  (statement_list
    (pipeline
      (logical_expression
        (bitwise_expression
          (comparison_expression
            (additive_expression
              (multiplicative_expression
                (format_expression
                  (range_expression
                    (array_literal_expression
                      (unary_expression
                        (string_literal
                          (expandable_string_literal
                            (variable)))))))))))))))