SHELL_SCRIPT
  COMMANDS_LIST
    SIMPLE_COMMAND
      GENERIC_COMMAND_DIRECTIVE
        LITERAL
          PsiElement(word)('cat')
      PsiWhiteSpace(' ')
      SIMPLE_COMMAND_ELEMENT
        REDIRECTION
          PROCESS_SUBSTITUTION
            PsiElement(<()('<(')
            COMPOUND_LIST
              PIPELINE_COMMAND_LIST
                SIMPLE_COMMAND
                  GENERIC_COMMAND_DIRECTIVE
                    LITERAL
                      PsiElement(word)('printf')
                  PsiWhiteSpace(' ')
                  STRING
                    PsiElement(RAW_STRING)(''%s\n'')
                  PsiWhiteSpace(' ')
                  STRING
                    PsiElement(OPEN_QUOTE)('"')
                    PsiElement($)('$')
                    SHELL_PARAMETER_EXPANSION
                      PsiElement({)('{')
                      PsiElement(word)('BEFORE')
                      ARRAY_EXPRESSION
                        PsiElement([)('[')
                        LITERAL_EXPRESSION
                          PsiElement(word)('@')
                        PsiElement(])(']')
                      PsiElement(})('}')
                    PsiElement(CLOSE_QUOTE)('"')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                SIMPLE_COMMAND
                  ASSIGNMENT_COMMAND
                    LITERAL
                      PsiElement(word)('LC_ALL')
                    PsiElement(=)('=')
                    LITERAL
                      PsiElement(word)('C')
                  PsiWhiteSpace(' ')
                  LITERAL
                    PsiElement(word)('sort')
            PsiElement())(')')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    COMMAND
      WHILE_COMMAND
        PsiElement(while)('while')
        PsiWhiteSpace(' ')
        COMPOUND_LIST
          SIMPLE_COMMAND
            GENERIC_COMMAND_DIRECTIVE
              LITERAL
                PsiElement(word)('read')
            PsiWhiteSpace(' ')
            LITERAL
              PsiElement(word)('line')
          PsiWhiteSpace(' ')
          PsiElement(;)(';')
        PsiWhiteSpace(' ')
        DO_BLOCK
          PsiElement(do)('do')
          PsiWhiteSpace(' ')
          COMPOUND_LIST
            SIMPLE_COMMAND
              GENERIC_COMMAND_DIRECTIVE
                LITERAL
                  PsiElement(word)('echo')
              PsiWhiteSpace(' ')
              VARIABLE
                PsiElement(var)('$line')
            PsiWhiteSpace(' ')
            PsiElement(;)(';')
          PsiWhiteSpace(' ')
          PsiElement(done)('done')
      PsiWhiteSpace(' ')
      REDIRECTION
        PsiElement(<)('<')
        PsiWhiteSpace(' ')
        PROCESS_SUBSTITUTION
          PsiElement(<()('<(')
          COMPOUND_LIST
            SIMPLE_COMMAND
              GENERIC_COMMAND_DIRECTIVE
                LITERAL
                  PsiElement(word)('echo')
              PsiWhiteSpace(' ')
              LITERAL
                PsiElement(word)(':')
          PsiElement())(')')
  PsiElement(\n)('\n')
  COMMANDS_LIST
    SIMPLE_COMMAND
      GENERIC_COMMAND_DIRECTIVE
        LITERAL
          PsiElement(word)('echo')
      PsiWhiteSpace(' ')
      SIMPLE_COMMAND_ELEMENT
        REDIRECTION
          PROCESS_SUBSTITUTION
            PsiElement(<()('<(')
            COMPOUND_LIST
              SIMPLE_COMMAND
                GENERIC_COMMAND_DIRECTIVE
                  LITERAL
                    PsiElement(word)('echo')
                PsiWhiteSpace(' ')
                LITERAL
                  PsiElement(word)('a')
            PsiElement())(')')
      PsiWhiteSpace(' ')
      VARIABLE
        PsiElement(var)('$var')