===
Strings : expandable
===

"foo"

---

(program
  (statement_list
    (pipeline
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
                                    (pipeline_chain
                                      (command
                                        (command_name)))))))))))))))))))))

===
Strings : verbatim
===

'foo'

---

(program
  (statement_list
    (pipeline
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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
      (pipeline_chain
        (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))))))))))))))))
