Files
vscode/extensions/shellscript/syntaxes/Shell-Unix-Bash.tmLanguage
Erich Gamma 8f35cc4768 Hello Code
2015-11-13 14:39:38 +01:00

1888 lines
44 KiB
Plaintext

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>sh</string>
<string>bash</string>
<string>zsh</string>
<string>bashrc</string>
<string>bash_profile</string>
<string>bash_login</string>
<string>profile</string>
<string>bash_logout</string>
<string>.textmate_init</string>
</array>
<key>firstLineMatch</key>
<string>^#!.*\b(bash|zsh|sh|tcsh)|^#\s*-\*-[^*]*mode:\s*shell-script[^*]*-\*-</string>
<key>keyEquivalent</key>
<string>^~S</string>
<key>name</key>
<string>Shell Script (Bash)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#pipeline</string>
</dict>
<dict>
<key>include</key>
<string>#list</string>
</dict>
<dict>
<key>include</key>
<string>#compound-command</string>
</dict>
<dict>
<key>include</key>
<string>#loop</string>
</dict>
<dict>
<key>include</key>
<string>#function-definition</string>
</dict>
<dict>
<key>include</key>
<string>#string</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>include</key>
<string>#interpolation</string>
</dict>
<dict>
<key>include</key>
<string>#heredoc</string>
</dict>
<dict>
<key>include</key>
<string>#herestring</string>
</dict>
<dict>
<key>include</key>
<string>#redirection</string>
</dict>
<dict>
<key>include</key>
<string>#pathname</string>
</dict>
<dict>
<key>include</key>
<string>#keyword</string>
</dict>
<dict>
<key>include</key>
<string>#support</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>case-clause</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(?=\S)</string>
<key>end</key>
<string>;;</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.terminator.case-clause.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.scope.case-clause.shell</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(\(|(?=\S))</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.case-pattern.shell</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>name</key>
<string>meta.scope.case-pattern.shell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\|</string>
<key>name</key>
<string>punctuation.separator.pipe-sign.shell</string>
</dict>
<dict>
<key>include</key>
<string>#string</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>include</key>
<string>#interpolation</string>
</dict>
<dict>
<key>include</key>
<string>#pathname</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=\))</string>
<key>end</key>
<string>(?=;;)</string>
<key>name</key>
<string>meta.scope.case-clause-body.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</dict>
<key>comment</key>
<dict>
<key>begin</key>
<string>(^[ \t]+)?(?&lt;!\S)(?=#)(?!#\{)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.whitespace.comment.leading.shell</string>
</dict>
</dict>
<key>end</key>
<string>(?!\G)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>#</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.shell</string>
</dict>
</dict>
<key>end</key>
<string>\n</string>
<key>name</key>
<string>comment.line.number-sign.shell</string>
</dict>
</array>
</dict>
<key>compound-command</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(\[{2})</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.logical-expression.shell</string>
</dict>
</dict>
<key>end</key>
<string>(\]{2})</string>
<key>name</key>
<string>meta.scope.logical-expression.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#logical-expression</string>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(\({2})</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>(\){2})</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.other.math.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#math</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(\()</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.subshell.shell</string>
</dict>
</dict>
<key>end</key>
<string>(\))</string>
<key>name</key>
<string>meta.scope.subshell.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?&lt;=\s|^)(\{)(?=\s|$)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.group.shell</string>
</dict>
</dict>
<key>end</key>
<string>(?&lt;=^|;)\s*(\})</string>
<key>name</key>
<string>meta.scope.group.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>function-definition</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b(function)\s+([^\s\\]+)(?:\s*(\(\)))?</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.function.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>entity.name.function.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.shell</string>
</dict>
</dict>
<key>end</key>
<string>;|&amp;|$</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.function.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.function.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b([^\s\\=]+)\s*(\(\))</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.function.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.shell</string>
</dict>
</dict>
<key>end</key>
<string>;|&amp;|$</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.function.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.function.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>heredoc</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(RUBY)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.ruby.embedded.shell</string>
<key>end</key>
<string>^\t*(RUBY)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.ruby.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.ruby</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(RUBY)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.ruby.embedded.shell</string>
<key>end</key>
<string>^(RUBY)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.ruby.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.ruby</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(PYTHON)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.python.embedded.shell</string>
<key>end</key>
<string>^\t*(PYTHON)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.python.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(PYTHON)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.python.embedded.shell</string>
<key>end</key>
<string>^(PYTHON)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.python.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.python</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(APPLESCRIPT)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.applescript.embedded.shell</string>
<key>end</key>
<string>^\t*(APPLESCRIPT)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.applescript.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.applescript</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(APPLESCRIPT)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>source.applescript.embedded.shell</string>
<key>end</key>
<string>^(APPLESCRIPT)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.applescript.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.applescript</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(HTML)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.embedded.shell</string>
<key>end</key>
<string>^\t*(HTML)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.html.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(HTML)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.embedded.shell</string>
<key>end</key>
<string>^(HTML)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.html.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.basic</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(MARKDOWN)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.markdown.embedded.shell</string>
<key>end</key>
<string>^\t*(MARKDOWN)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.markdown.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.markdown</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(MARKDOWN)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.markdown.embedded.shell</string>
<key>end</key>
<string>^(MARKDOWN)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.markdown.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.markdown</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)(TEXTILE)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.textile.embedded.shell</string>
<key>end</key>
<string>^\t*(TEXTILE)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.textile.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.textile</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)(TEXTILE)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>contentName</key>
<string>text.html.textile.embedded.shell</string>
<key>end</key>
<string>^(TEXTILE)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.textile.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>text.html.textile</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)-("|'|)\\?(\w+)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>end</key>
<string>^\t*(\3)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.no-indent.shell</string>
</dict>
<dict>
<key>begin</key>
<string>(&lt;&lt;)("|'|)\\?(\w+)\2</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.heredoc.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.shell</string>
</dict>
</dict>
<key>end</key>
<string>^(\3)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.heredoc-token.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.unquoted.heredoc.shell</string>
</dict>
</array>
</dict>
<key>herestring</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.herestring.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.quoted.single.herestring.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>match</key>
<string>(&lt;&lt;&lt;)((')[^']*('))</string>
<key>name</key>
<string>meta.herestring.shell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.herestring.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.quoted.double.herestring.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>match</key>
<string>(&lt;&lt;&lt;)((")(\\("|\\)|[^"])*("))</string>
<key>name</key>
<string>meta.herestring.shell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.herestring.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>string.unquoted.herestring.shell</string>
</dict>
</dict>
<key>match</key>
<string>(&lt;&lt;&lt;)(([^\s\\]|\\.)+)</string>
<key>name</key>
<string>meta.herestring.shell</string>
</dict>
</array>
</dict>
<key>interpolation</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\$\({2}</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>\){2}</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.other.math.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#math</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>`</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>`</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.interpolated.backtick.shell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\[`\\$]</string>
<key>name</key>
<string>constant.character.escape.shell</string>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\$\(</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.interpolated.dollar.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>keyword</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(?:if|then|else|elif|fi|for|in|do|done|select|case|continue|esac|while|until|return)\b</string>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
<dict>
<key>match</key>
<string>(?&lt;![-/])\b(?:export|declare|typeset|local|readonly)\b</string>
<key>name</key>
<string>storage.modifier.shell</string>
</dict>
</array>
</dict>
<key>list</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>;|&amp;&amp;|&amp;|\|\|</string>
<key>name</key>
<string>keyword.operator.list.shell</string>
</dict>
</array>
</dict>
<key>logical-expression</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>comment</key>
<string>do we want a special rule for ( expr )?</string>
<key>match</key>
<string>=[=~]?|!=?|&lt;|&gt;|&amp;&amp;|\|\|</string>
<key>name</key>
<string>keyword.operator.logical.shell</string>
</dict>
<dict>
<key>match</key>
<string>(?&lt;!\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])</string>
<key>name</key>
<string>keyword.operator.logical.shell</string>
</dict>
</array>
</dict>
<key>loop</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b(for)\s+(?=\({2})</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>end</key>
<string>\b(done)\b</string>
<key>name</key>
<string>meta.scope.for-loop.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(for)\s+((?:[^\s\\]|\\.)+)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.other.loop.shell</string>
</dict>
</dict>
<key>end</key>
<string>\b(done)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.scope.for-in-loop.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(while|until)\b</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>end</key>
<string>\b(done)\b</string>
<key>name</key>
<string>meta.scope.while-loop.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(select)\s+((?:[^\s\\]|\\.)+)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.other.loop.shell</string>
</dict>
</dict>
<key>end</key>
<string>\b(done)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.scope.select-block.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(case)\b</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>end</key>
<string>\b(esac)\b</string>
<key>name</key>
<string>meta.scope.case-block.shell</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\b(?:in)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>end</key>
<string>(?=\b(?:esac)\b)</string>
<key>name</key>
<string>meta.scope.case-body.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#comment</string>
</dict>
<dict>
<key>include</key>
<string>#case-clause</string>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(^|(?&lt;=[&amp;;|]))\s*(if)\b</string>
<key>beginCaptures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>comment</key>
<string>Restrict match to avoid matching in lines like `dd if=/dev/sda1 …`</string>
<key>end</key>
<string>\b(fi)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.scope.if-block.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>math</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>match</key>
<string>\+{1,2}|-{1,2}|!|~|\*{1,2}|/|%|&lt;[&lt;=]?|&gt;[&gt;=]?|==|!=|\^|\|{1,2}|&amp;{1,2}|\?|\:|,|=|[*/%+\-&amp;^|]=|&lt;&lt;=|&gt;&gt;=</string>
<key>name</key>
<string>keyword.operator.arithmetic.shell</string>
</dict>
<dict>
<key>match</key>
<string>0[xX]\h+</string>
<key>name</key>
<string>constant.numeric.hex.shell</string>
</dict>
<dict>
<key>match</key>
<string>0\d+</string>
<key>name</key>
<string>constant.numeric.octal.shell</string>
</dict>
<dict>
<key>match</key>
<string>\d{1,2}#[0-9a-zA-Z@_]+</string>
<key>name</key>
<string>constant.numeric.other.shell</string>
</dict>
<dict>
<key>match</key>
<string>\d+</string>
<key>name</key>
<string>constant.numeric.integer.shell</string>
</dict>
</array>
</dict>
<key>pathname</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(?&lt;=\s|:|=|^)~</string>
<key>name</key>
<string>keyword.operator.tilde.shell</string>
</dict>
<dict>
<key>match</key>
<string>\*|\?</string>
<key>name</key>
<string>keyword.operator.glob.shell</string>
</dict>
<dict>
<key>begin</key>
<string>([?*+@!])(\()</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.operator.extglob.shell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.extglob.shell</string>
</dict>
</dict>
<key>end</key>
<string>(\))</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.extglob.shell</string>
</dict>
</dict>
<key>name</key>
<string>meta.structure.extglob.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>pipeline</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(time)\b</string>
<key>name</key>
<string>keyword.other.shell</string>
</dict>
<dict>
<key>match</key>
<string>[|!]</string>
<key>name</key>
<string>keyword.operator.pipe.shell</string>
</dict>
</array>
</dict>
<key>redirection</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>[&gt;&lt;]\(</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.interpolated.process-substitution.shell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>comment</key>
<string>valid: &amp;&gt;word &gt;&amp;word &gt;word [n]&gt;&amp;[n] [n]&lt;word [n]&gt;word [n]&gt;&gt;word [n]&lt;&amp;word (last one is duplicate)</string>
<key>match</key>
<string>&amp;&gt;|\d*&gt;&amp;\d*|\d*(&gt;&gt;|&gt;|&lt;)|\d*&lt;&amp;|\d*&lt;&gt;</string>
<key>name</key>
<string>keyword.operator.redirect.shell</string>
</dict>
</array>
</dict>
<key>string</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\.</string>
<key>name</key>
<string>constant.character.escape.shell</string>
</dict>
<dict>
<key>begin</key>
<string>'</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>'</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.single.shell</string>
</dict>
<dict>
<key>begin</key>
<string>\$?"</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>"</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.shell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\[\$`"\\\n]</string>
<key>name</key>
<string>constant.character.escape.shell</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>include</key>
<string>#interpolation</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\$'</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.shell</string>
</dict>
</dict>
<key>end</key>
<string>'</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.shell</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.single.dollar.shell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\(a|b|e|f|n|r|t|v|\\|')</string>
<key>name</key>
<string>constant.character.escape.ansi-c.shell</string>
</dict>
<dict>
<key>match</key>
<string>\\[0-9]{3}</string>
<key>name</key>
<string>constant.character.escape.octal.shell</string>
</dict>
<dict>
<key>match</key>
<string>\\x[0-9a-fA-F]{2}</string>
<key>name</key>
<string>constant.character.escape.hex.shell</string>
</dict>
<dict>
<key>match</key>
<string>\\c.</string>
<key>name</key>
<string>constant.character.escape.control-char.shell</string>
</dict>
</array>
</dict>
</array>
</dict>
<key>support</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(?&lt;=^|\s)(?::|\.)(?=\s|;|&amp;|$)</string>
<key>name</key>
<string>support.function.builtin.shell</string>
</dict>
<dict>
<key>match</key>
<string>(?&lt;![-/])\b(?:alias|bg|bind|break|builtin|caller|cd|command|compgen|complete|dirs|disown|echo|enable|eval|exec|exit|false|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|read|readonly|set|shift|shopt|source|suspend|test|times|trap|true|type|ulimit|umask|unalias|unset|wait)\b</string>
<key>name</key>
<string>support.function.builtin.shell</string>
</dict>
</array>
</dict>
<key>variable</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.variable.shell</string>
</dict>
</dict>
<key>match</key>
<string>(\$)[a-zA-Z_][a-zA-Z0-9_]*</string>
<key>name</key>
<string>variable.other.normal.shell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.variable.shell</string>
</dict>
</dict>
<key>match</key>
<string>(\$)[-*@#?$!0_]</string>
<key>name</key>
<string>variable.other.special.shell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.variable.shell</string>
</dict>
</dict>
<key>match</key>
<string>(\$)[1-9]</string>
<key>name</key>
<string>variable.other.positional.shell</string>
</dict>
<dict>
<key>begin</key>
<string>\$\{</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.variable.shell</string>
</dict>
</dict>
<key>end</key>
<string>\}</string>
<key>name</key>
<string>variable.other.bracket.shell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>!|:[-=?+]?|\*|@|#{1,2}|%{1,2}|/</string>
<key>name</key>
<string>keyword.operator.expansion.shell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.section.array.shell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.section.array.shell</string>
</dict>
</dict>
<key>match</key>
<string>(\[)([^\]]+)(\])</string>
</dict>
<dict>
<key>include</key>
<string>#string</string>
</dict>
<dict>
<key>include</key>
<string>#variable</string>
</dict>
<dict>
<key>include</key>
<string>#interpolation</string>
</dict>
</array>
</dict>
</array>
</dict>
</dict>
<key>scopeName</key>
<string>source.shell</string>
<key>uuid</key>
<string>DDEEA3ED-6B1C-11D9-8B10-000D93589AF6</string>
</dict>
</plist>