1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3<plist version="1.0">
4<dict>
5 <key>fileTypes</key>
6 <array>
7 <string>sh</string>
8 <string>bash</string>
9 <string>zsh</string>
10 <string>bashrc</string>
11 <string>bash_profile</string>
12 <string>bash_login</string>
13 <string>profile</string>
14 <string>bash_logout</string>
15 <string>.textmate_init</string>
16 </array>
17 <key>firstLineMatch</key>
18 <string>^#!.*\b(bash|zsh|sh|tcsh)|^#.*-\*-.*\bshell-script\b.*-\*-</string>
19 <key>keyEquivalent</key>
20 <string>^~S</string>
21 <key>name</key>
22 <string>Shell Script (Bash)</string>
23 <key>patterns</key>
24 <array>
25 <dict>
26 <key>include</key>
27 <string>#comment</string>
28 </dict>
29 <dict>
30 <key>include</key>
31 <string>#pipeline</string>
32 </dict>
33 <dict>
34 <key>include</key>
35 <string>#list</string>
36 </dict>
37 <dict>
38 <key>include</key>
39 <string>#compound-command</string>
40 </dict>
41 <dict>
42 <key>include</key>
43 <string>#loop</string>
44 </dict>
45 <dict>
46 <key>include</key>
47 <string>#string</string>
48 </dict>
49 <dict>
50 <key>include</key>
51 <string>#function-definition</string>
52 </dict>
53 <dict>
54 <key>include</key>
55 <string>#variable</string>
56 </dict>
57 <dict>
58 <key>include</key>
59 <string>#interpolation</string>
60 </dict>
61 <dict>
62 <key>include</key>
63 <string>#heredoc</string>
64 </dict>
65 <dict>
66 <key>include</key>
67 <string>#herestring</string>
68 </dict>
69 <dict>
70 <key>include</key>
71 <string>#redirection</string>
72 </dict>
73 <dict>
74 <key>include</key>
75 <string>#pathname</string>
76 </dict>
77 <dict>
78 <key>include</key>
79 <string>#keyword</string>
80 </dict>
81 <dict>
82 <key>include</key>
83 <string>#support</string>
84 </dict>
85 <dict>
86 <key>include</key>
87 <string>#lines</string>
88 </dict>
89 </array>
90 <key>repository</key>
91 <dict>
92 <key>case-clause</key>
93 <dict>
94 <key>patterns</key>
95 <array>
96 <dict>
97 <key>begin</key>
98 <string>(?=\S)</string>
99 <key>end</key>
100 <string>;;</string>
101 <key>endCaptures</key>
102 <dict>
103 <key>0</key>
104 <dict>
105 <key>name</key>
106 <string>punctuation.terminator.case-clause.shell</string>
107 </dict>
108 </dict>
109 <key>name</key>
110 <string>meta.scope.case-clause.shell</string>
111 <key>patterns</key>
112 <array>
113 <dict>
114 <key>begin</key>
115 <string>(\(|(?=\S))</string>
116 <key>captures</key>
117 <dict>
118 <key>0</key>
119 <dict>
120 <key>name</key>
121 <string>punctuation.definition.case-pattern.shell</string>
122 </dict>
123 </dict>
124 <key>end</key>
125 <string>\)</string>
126 <key>name</key>
127 <string>meta.scope.case-pattern.shell</string>
128 <key>patterns</key>
129 <array>
130 <dict>
131 <key>match</key>
132 <string>\|</string>
133 <key>name</key>
134 <string>punctuation.separator.pipe-sign.shell</string>
135 </dict>
136 <dict>
137 <key>include</key>
138 <string>#string</string>
139 </dict>
140 <dict>
141 <key>include</key>
142 <string>#variable</string>
143 </dict>
144 <dict>
145 <key>include</key>
146 <string>#interpolation</string>
147 </dict>
148 <dict>
149 <key>include</key>
150 <string>#pathname</string>
151 </dict>
152 </array>
153 </dict>
154 <dict>
155 <key>begin</key>
156 <string>(?&lt;=\))</string>
157 <key>end</key>
158 <string>(?=;;)</string>
159 <key>name</key>
160 <string>meta.scope.case-clause-body.shell</string>
161 <key>patterns</key>
162 <array>
163 <dict>
164 <key>include</key>
165 <string>$self</string>
166 </dict>
167 </array>
168 </dict>
169 </array>
170 </dict>
171 </array>
172 </dict>
173 <key>comment</key>
174 <dict>
175 <key>begin</key>
176 <string>(^[ \t]+)?(?&lt;!\S)(?=#)(?!#\{)</string>
177 <key>beginCaptures</key>
178 <dict>
179 <key>1</key>
180 <dict>
181 <key>name</key>
182 <string>punctuation.whitespace.comment.leading.shell</string>
183 </dict>
184 </dict>
185 <key>end</key>
186 <string>(?!\G)</string>
187 <key>patterns</key>
188 <array>
189 <dict>
190 <key>begin</key>
191 <string>^(#!)</string>
192 <key>beginCaptures</key>
193 <dict>
194 <key>1</key>
195 <dict>
196 <key>name</key>
197 <string>punctuation.definition.comment.line.shebang.shell</string>
198 </dict>
199 </dict>
200 <key>end</key>
201 <string>\n</string>
202 <key>name</key>
203 <string>comment.line.shebang.shell</string>
204 </dict>
205 <dict>
206 <key>begin</key>
207 <string>#</string>
208 <key>beginCaptures</key>
209 <dict>
210 <key>0</key>
211 <dict>
212 <key>name</key>
213 <string>punctuation.definition.comment.shell</string>
214 </dict>
215 </dict>
216 <key>end</key>
217 <string>\n</string>
218 <key>name</key>
219 <string>comment.line.number-sign.shell</string>
220 </dict>
221 </array>
222 </dict>
223 <key>compound-command</key>
224 <dict>
225 <key>patterns</key>
226 <array>
227 <dict>
228 <key>begin</key>
229 <string>(\[{2})</string>
230 <key>captures</key>
231 <dict>
232 <key>1</key>
233 <dict>
234 <key>name</key>
235 <string>punctuation.definition.logical-expression.shell</string>
236 </dict>
237 </dict>
238 <key>end</key>
239 <string>(\]{2})</string>
240 <key>name</key>
241 <string>meta.scope.logical-expression.shell</string>
242 <key>patterns</key>
243 <array>
244 <dict>
245 <key>include</key>
246 <string>#logical-expression</string>
247 </dict>
248 <dict>
249 <key>include</key>
250 <string>$self</string>
251 </dict>
252 </array>
253 </dict>
254 <dict>
255 <key>begin</key>
256 <string>(\({2})</string>
257 <key>beginCaptures</key>
258 <dict>
259 <key>0</key>
260 <dict>
261 <key>name</key>
262 <string>punctuation.definition.string.begin.shell</string>
263 </dict>
264 </dict>
265 <key>end</key>
266 <string>(\){2})</string>
267 <key>endCaptures</key>
268 <dict>
269 <key>0</key>
270 <dict>
271 <key>name</key>
272 <string>punctuation.definition.string.end.shell</string>
273 </dict>
274 </dict>
275 <key>name</key>
276 <string>string.other.math.shell</string>
277 <key>patterns</key>
278 <array>
279 <dict>
280 <key>include</key>
281 <string>#math</string>
282 </dict>
283 </array>
284 </dict>
285 <dict>
286 <key>begin</key>
287 <string>(\()</string>
288 <key>captures</key>
289 <dict>
290 <key>1</key>
291 <dict>
292 <key>name</key>
293 <string>punctuation.definition.subshell.shell</string>
294 </dict>
295 </dict>
296 <key>end</key>
297 <string>(\))</string>
298 <key>name</key>
299 <string>meta.scope.subshell.shell</string>
300 <key>patterns</key>
301 <array>
302 <dict>
303 <key>include</key>
304 <string>$self</string>
305 </dict>
306 </array>
307 </dict>
308 <dict>
309 <key>begin</key>
310 <string>(?&lt;=\s|^)(\{)(?=\s|$)</string>
311 <key>captures</key>
312 <dict>
313 <key>1</key>
314 <dict>
315 <key>name</key>
316 <string>punctuation.definition.group.shell</string>
317 </dict>
318 </dict>
319 <key>end</key>
320 <string>(?&lt;=^|;)\s*(\})</string>
321 <key>name</key>
322 <string>meta.scope.group.shell</string>
323 <key>patterns</key>
324 <array>
325 <dict>
326 <key>include</key>
327 <string>$self</string>
328 </dict>
329 </array>
330 </dict>
331 </array>
332 </dict>
333 <key>function-definition</key>
334 <dict>
335 <key>patterns</key>
336 <array>
337 <dict>
338 <key>begin</key>
339 <string>(?&lt;=^|;|&amp;)\s*(function)\s+([^\s&lt;&gt;;'"\\|$&amp;()]+)(?:\s*(\(\)))?</string>
340 <key>beginCaptures</key>
341 <dict>
342 <key>1</key>
343 <dict>
344 <key>name</key>
345 <string>storage.type.function.shell</string>
346 </dict>
347 <key>2</key>
348 <dict>
349 <key>name</key>
350 <string>entity.name.function.shell</string>
351 </dict>
352 <key>3</key>
353 <dict>
354 <key>name</key>
355 <string>punctuation.definition.arguments.shell</string>
356 </dict>
357 </dict>
358 <key>end</key>
359 <string>;|&amp;|\n</string>
360 <key>endCaptures</key>
361 <dict>
362 <key>0</key>
363 <dict>
364 <key>name</key>
365 <string>punctuation.definition.function.shell</string>
366 </dict>
367 </dict>
368 <key>name</key>
369 <string>meta.function.shell</string>
370 <key>patterns</key>
371 <array>
372 <dict>
373 <key>include</key>
374 <string>$self</string>
375 </dict>
376 </array>
377 </dict>
378 <dict>
379 <key>begin</key>
380 <string>(?&lt;=^|;|&amp;)\s*([^\s&lt;&gt;;'"\\|$&amp;()]+)\s*(\(\))</string>
381 <key>beginCaptures</key>
382 <dict>
383 <key>1</key>
384 <dict>
385 <key>name</key>
386 <string>entity.name.function.shell</string>
387 </dict>
388 <key>2</key>
389 <dict>
390 <key>name</key>
391 <string>punctuation.definition.arguments.shell</string>
392 </dict>
393 </dict>
394 <key>end</key>
395 <string>;|&amp;|\n</string>
396 <key>endCaptures</key>
397 <dict>
398 <key>0</key>
399 <dict>
400 <key>name</key>
401 <string>punctuation.definition.function.shell</string>
402 </dict>
403 </dict>
404 <key>name</key>
405 <string>meta.function.shell</string>
406 <key>patterns</key>
407 <array>
408 <dict>
409 <key>include</key>
410 <string>$self</string>
411 </dict>
412 </array>
413 </dict>
414 </array>
415 </dict>
416 <key>heredoc</key>
417 <dict>
418 <key>patterns</key>
419 <array>
420 <dict>
421 <key>begin</key>
422 <string>(&lt;&lt;)-\s*("|'|)(RUBY)\2</string>
423 <key>beginCaptures</key>
424 <dict>
425 <key>1</key>
426 <dict>
427 <key>name</key>
428 <string>keyword.operator.heredoc.shell</string>
429 </dict>
430 <key>3</key>
431 <dict>
432 <key>name</key>
433 <string>keyword.control.heredoc-token.shell</string>
434 </dict>
435 </dict>
436 <key>captures</key>
437 <dict>
438 <key>0</key>
439 <dict>
440 <key>name</key>
441 <string>punctuation.definition.string.shell</string>
442 </dict>
443 </dict>
444 <key>contentName</key>
445 <string>source.ruby.embedded.shell</string>
446 <key>end</key>
447 <string>^\t*(RUBY)(?=\s|;|&amp;|$)</string>
448 <key>endCaptures</key>
449 <dict>
450 <key>1</key>
451 <dict>
452 <key>name</key>
453 <string>keyword.control.heredoc-token.shell</string>
454 </dict>
455 </dict>
456 <key>name</key>
457 <string>string.unquoted.heredoc.no-indent.ruby.shell</string>
458 <key>patterns</key>
459 <array>
460 <dict>
461 <key>include</key>
462 <string>source.ruby</string>
463 </dict>
464 </array>
465 </dict>
466 <dict>
467 <key>begin</key>
468 <string>(&lt;&lt;)\s*("|'|)(RUBY)\2</string>
469 <key>beginCaptures</key>
470 <dict>
471 <key>1</key>
472 <dict>
473 <key>name</key>
474 <string>keyword.operator.heredoc.shell</string>
475 </dict>
476 <key>3</key>
477 <dict>
478 <key>name</key>
479 <string>keyword.control.heredoc-token.shell</string>
480 </dict>
481 </dict>
482 <key>captures</key>
483 <dict>
484 <key>0</key>
485 <dict>
486 <key>name</key>
487 <string>punctuation.definition.string.shell</string>
488 </dict>
489 </dict>
490 <key>contentName</key>
491 <string>source.ruby.embedded.shell</string>
492 <key>end</key>
493 <string>^(RUBY)(?=\s|;|&amp;|$)</string>
494 <key>endCaptures</key>
495 <dict>
496 <key>1</key>
497 <dict>
498 <key>name</key>
499 <string>keyword.control.heredoc-token.shell</string>
500 </dict>
501 </dict>
502 <key>name</key>
503 <string>string.unquoted.heredoc.ruby.shell</string>
504 <key>patterns</key>
505 <array>
506 <dict>
507 <key>include</key>
508 <string>source.ruby</string>
509 </dict>
510 </array>
511 </dict>
512 <dict>
513 <key>begin</key>
514 <string>(&lt;&lt;)-\s*("|'|)(PYTHON)\2</string>
515 <key>beginCaptures</key>
516 <dict>
517 <key>1</key>
518 <dict>
519 <key>name</key>
520 <string>keyword.operator.heredoc.shell</string>
521 </dict>
522 <key>3</key>
523 <dict>
524 <key>name</key>
525 <string>keyword.control.heredoc-token.shell</string>
526 </dict>
527 </dict>
528 <key>captures</key>
529 <dict>
530 <key>0</key>
531 <dict>
532 <key>name</key>
533 <string>punctuation.definition.string.shell</string>
534 </dict>
535 </dict>
536 <key>contentName</key>
537 <string>source.python.embedded.shell</string>
538 <key>end</key>
539 <string>^\t*(PYTHON)(?=\s|;|&amp;|$)</string>
540 <key>endCaptures</key>
541 <dict>
542 <key>1</key>
543 <dict>
544 <key>name</key>
545 <string>keyword.control.heredoc-token.shell</string>
546 </dict>
547 </dict>
548 <key>name</key>
549 <string>string.unquoted.heredoc.no-indent.python.shell</string>
550 <key>patterns</key>
551 <array>
552 <dict>
553 <key>include</key>
554 <string>source.python</string>
555 </dict>
556 </array>
557 </dict>
558 <dict>
559 <key>begin</key>
560 <string>(&lt;&lt;)\s*("|'|)(PYTHON)\2</string>
561 <key>beginCaptures</key>
562 <dict>
563 <key>1</key>
564 <dict>
565 <key>name</key>
566 <string>keyword.operator.heredoc.shell</string>
567 </dict>
568 <key>3</key>
569 <dict>
570 <key>name</key>
571 <string>keyword.control.heredoc-token.shell</string>
572 </dict>
573 </dict>
574 <key>captures</key>
575 <dict>
576 <key>0</key>
577 <dict>
578 <key>name</key>
579 <string>punctuation.definition.string.shell</string>
580 </dict>
581 </dict>
582 <key>contentName</key>
583 <string>source.python.embedded.shell</string>
584 <key>end</key>
585 <string>^(PYTHON)(?=\s|;|&amp;|$)</string>
586 <key>endCaptures</key>
587 <dict>
588 <key>1</key>
589 <dict>
590 <key>name</key>
591 <string>keyword.control.heredoc-token.shell</string>
592 </dict>
593 </dict>
594 <key>name</key>
595 <string>string.unquoted.heredoc.python.shell</string>
596 <key>patterns</key>
597 <array>
598 <dict>
599 <key>include</key>
600 <string>source.python</string>
601 </dict>
602 </array>
603 </dict>
604 <dict>
605 <key>begin</key>
606 <string>(&lt;&lt;)-\s*("|'|)(APPLESCRIPT)\2</string>
607 <key>beginCaptures</key>
608 <dict>
609 <key>1</key>
610 <dict>
611 <key>name</key>
612 <string>keyword.operator.heredoc.shell</string>
613 </dict>
614 <key>3</key>
615 <dict>
616 <key>name</key>
617 <string>keyword.control.heredoc-token.shell</string>
618 </dict>
619 </dict>
620 <key>captures</key>
621 <dict>
622 <key>0</key>
623 <dict>
624 <key>name</key>
625 <string>punctuation.definition.string.shell</string>
626 </dict>
627 </dict>
628 <key>contentName</key>
629 <string>source.applescript.embedded.shell</string>
630 <key>end</key>
631 <string>^\t*(APPLESCRIPT)(?=\s|;|&amp;|$)</string>
632 <key>endCaptures</key>
633 <dict>
634 <key>1</key>
635 <dict>
636 <key>name</key>
637 <string>keyword.control.heredoc-token.shell</string>
638 </dict>
639 </dict>
640 <key>name</key>
641 <string>string.unquoted.heredoc.no-indent.applescript.shell</string>
642 <key>patterns</key>
643 <array>
644 <dict>
645 <key>include</key>
646 <string>source.applescript</string>
647 </dict>
648 </array>
649 </dict>
650 <dict>
651 <key>begin</key>
652 <string>(&lt;&lt;)\s*("|'|)(APPLESCRIPT)\2</string>
653 <key>beginCaptures</key>
654 <dict>
655 <key>1</key>
656 <dict>
657 <key>name</key>
658 <string>keyword.operator.heredoc.shell</string>
659 </dict>
660 <key>3</key>
661 <dict>
662 <key>name</key>
663 <string>keyword.control.heredoc-token.shell</string>
664 </dict>
665 </dict>
666 <key>captures</key>
667 <dict>
668 <key>0</key>
669 <dict>
670 <key>name</key>
671 <string>punctuation.definition.string.shell</string>
672 </dict>
673 </dict>
674 <key>contentName</key>
675 <string>source.applescript.embedded.shell</string>
676 <key>end</key>
677 <string>^(APPLESCRIPT)(?=\s|;|&amp;|$)</string>
678 <key>endCaptures</key>
679 <dict>
680 <key>1</key>
681 <dict>
682 <key>name</key>
683 <string>keyword.control.heredoc-token.shell</string>
684 </dict>
685 </dict>
686 <key>name</key>
687 <string>string.unquoted.heredoc.applescript.shell</string>
688 <key>patterns</key>
689 <array>
690 <dict>
691 <key>include</key>
692 <string>source.applescript</string>
693 </dict>
694 </array>
695 </dict>
696 <dict>
697 <key>begin</key>
698 <string>(&lt;&lt;)-\s*("|'|)(HTML)\2</string>
699 <key>beginCaptures</key>
700 <dict>
701 <key>1</key>
702 <dict>
703 <key>name</key>
704 <string>keyword.operator.heredoc.shell</string>
705 </dict>
706 <key>3</key>
707 <dict>
708 <key>name</key>
709 <string>keyword.control.heredoc-token.shell</string>
710 </dict>
711 </dict>
712 <key>captures</key>
713 <dict>
714 <key>0</key>
715 <dict>
716 <key>name</key>
717 <string>punctuation.definition.string.shell</string>
718 </dict>
719 </dict>
720 <key>contentName</key>
721 <string>text.html.embedded.shell</string>
722 <key>end</key>
723 <string>^\t*(HTML)(?=\s|;|&amp;|$)</string>
724 <key>endCaptures</key>
725 <dict>
726 <key>1</key>
727 <dict>
728 <key>name</key>
729 <string>keyword.control.heredoc-token.shell</string>
730 </dict>
731 </dict>
732 <key>name</key>
733 <string>string.unquoted.heredoc.no-indent.html.shell</string>
734 <key>patterns</key>
735 <array>
736 <dict>
737 <key>include</key>
738 <string>text.html.basic</string>
739 </dict>
740 </array>
741 </dict>
742 <dict>
743 <key>begin</key>
744 <string>(&lt;&lt;)\s*("|'|)(HTML)\2</string>
745 <key>beginCaptures</key>
746 <dict>
747 <key>1</key>
748 <dict>
749 <key>name</key>
750 <string>keyword.operator.heredoc.shell</string>
751 </dict>
752 <key>3</key>
753 <dict>
754 <key>name</key>
755 <string>keyword.control.heredoc-token.shell</string>
756 </dict>
757 </dict>
758 <key>captures</key>
759 <dict>
760 <key>0</key>
761 <dict>
762 <key>name</key>
763 <string>punctuation.definition.string.shell</string>
764 </dict>
765 </dict>
766 <key>contentName</key>
767 <string>text.html.embedded.shell</string>
768 <key>end</key>
769 <string>^(HTML)(?=\s|;|&amp;|$)</string>
770 <key>endCaptures</key>
771 <dict>
772 <key>1</key>
773 <dict>
774 <key>name</key>
775 <string>keyword.control.heredoc-token.shell</string>
776 </dict>
777 </dict>
778 <key>name</key>
779 <string>string.unquoted.heredoc.html.shell</string>
780 <key>patterns</key>
781 <array>
782 <dict>
783 <key>include</key>
784 <string>text.html.basic</string>
785 </dict>
786 </array>
787 </dict>
788 <dict>
789 <key>begin</key>
790 <string>(&lt;&lt;)-\s*("|'|)(MARKDOWN)\2</string>
791 <key>beginCaptures</key>
792 <dict>
793 <key>1</key>
794 <dict>
795 <key>name</key>
796 <string>keyword.operator.heredoc.shell</string>
797 </dict>
798 <key>3</key>
799 <dict>
800 <key>name</key>
801 <string>keyword.control.heredoc-token.shell</string>
802 </dict>
803 </dict>
804 <key>captures</key>
805 <dict>
806 <key>0</key>
807 <dict>
808 <key>name</key>
809 <string>punctuation.definition.string.shell</string>
810 </dict>
811 </dict>
812 <key>contentName</key>
813 <string>text.html.markdown.embedded.shell</string>
814 <key>end</key>
815 <string>^\t*(MARKDOWN)(?=\s|;|&amp;|$)</string>
816 <key>endCaptures</key>
817 <dict>
818 <key>1</key>
819 <dict>
820 <key>name</key>
821 <string>keyword.control.heredoc-token.shell</string>
822 </dict>
823 </dict>
824 <key>name</key>
825 <string>string.unquoted.heredoc.no-indent.markdown.shell</string>
826 <key>patterns</key>
827 <array>
828 <dict>
829 <key>include</key>
830 <string>text.html.markdown</string>
831 </dict>
832 </array>
833 </dict>
834 <dict>
835 <key>begin</key>
836 <string>(&lt;&lt;)\s*("|'|)(MARKDOWN)\2</string>
837 <key>beginCaptures</key>
838 <dict>
839 <key>1</key>
840 <dict>
841 <key>name</key>
842 <string>keyword.operator.heredoc.shell</string>
843 </dict>
844 <key>3</key>
845 <dict>
846 <key>name</key>
847 <string>keyword.control.heredoc-token.shell</string>
848 </dict>
849 </dict>
850 <key>captures</key>
851 <dict>
852 <key>0</key>
853 <dict>
854 <key>name</key>
855 <string>punctuation.definition.string.shell</string>
856 </dict>
857 </dict>
858 <key>contentName</key>
859 <string>text.html.markdown.embedded.shell</string>
860 <key>end</key>
861 <string>^(MARKDOWN)(?=\s|;|&amp;|$)</string>
862 <key>endCaptures</key>
863 <dict>
864 <key>1</key>
865 <dict>
866 <key>name</key>
867 <string>keyword.control.heredoc-token.shell</string>
868 </dict>
869 </dict>
870 <key>name</key>
871 <string>string.unquoted.heredoc.markdown.shell</string>
872 <key>patterns</key>
873 <array>
874 <dict>
875 <key>include</key>
876 <string>text.html.markdown</string>
877 </dict>
878 </array>
879 </dict>
880 <dict>
881 <key>begin</key>
882 <string>(&lt;&lt;)-\s*("|'|)(TEXTILE)\2</string>
883 <key>beginCaptures</key>
884 <dict>
885 <key>1</key>
886 <dict>
887 <key>name</key>
888 <string>keyword.operator.heredoc.shell</string>
889 </dict>
890 <key>3</key>
891 <dict>
892 <key>name</key>
893 <string>keyword.control.heredoc-token.shell</string>
894 </dict>
895 </dict>
896 <key>captures</key>
897 <dict>
898 <key>0</key>
899 <dict>
900 <key>name</key>
901 <string>punctuation.definition.string.shell</string>
902 </dict>
903 </dict>
904 <key>contentName</key>
905 <string>text.html.textile.embedded.shell</string>
906 <key>end</key>
907 <string>^\t*(TEXTILE)(?=\s|;|&amp;|$)</string>
908 <key>endCaptures</key>
909 <dict>
910 <key>1</key>
911 <dict>
912 <key>name</key>
913 <string>keyword.control.heredoc-token.shell</string>
914 </dict>
915 </dict>
916 <key>name</key>
917 <string>string.unquoted.heredoc.no-indent.textile.shell</string>
918 <key>patterns</key>
919 <array>
920 <dict>
921 <key>include</key>
922 <string>text.html.textile</string>
923 </dict>
924 </array>
925 </dict>
926 <dict>
927 <key>begin</key>
928 <string>(&lt;&lt;)\s*("|'|)(TEXTILE)\2</string>
929 <key>beginCaptures</key>
930 <dict>
931 <key>1</key>
932 <dict>
933 <key>name</key>
934 <string>keyword.operator.heredoc.shell</string>
935 </dict>
936 <key>3</key>
937 <dict>
938 <key>name</key>
939 <string>keyword.control.heredoc-token.shell</string>
940 </dict>
941 </dict>
942 <key>captures</key>
943 <dict>
944 <key>0</key>
945 <dict>
946 <key>name</key>
947 <string>punctuation.definition.string.shell</string>
948 </dict>
949 </dict>
950 <key>contentName</key>
951 <string>text.html.textile.embedded.shell</string>
952 <key>end</key>
953 <string>^(TEXTILE)(?=\s|;|&amp;|$)</string>
954 <key>endCaptures</key>
955 <dict>
956 <key>1</key>
957 <dict>
958 <key>name</key>
959 <string>keyword.control.heredoc-token.shell</string>
960 </dict>
961 </dict>
962 <key>name</key>
963 <string>string.unquoted.heredoc.textile.shell</string>
964 <key>patterns</key>
965 <array>
966 <dict>
967 <key>include</key>
968 <string>text.html.textile</string>
969 </dict>
970 </array>
971 </dict>
972 <dict>
973 <key>begin</key>
974 <string>(&lt;&lt;)-\s*("|'|)\\?(\w+)\2</string>
975 <key>beginCaptures</key>
976 <dict>
977 <key>1</key>
978 <dict>
979 <key>name</key>
980 <string>keyword.operator.heredoc.shell</string>
981 </dict>
982 <key>3</key>
983 <dict>
984 <key>name</key>
985 <string>keyword.control.heredoc-token.shell</string>
986 </dict>
987 </dict>
988 <key>captures</key>
989 <dict>
990 <key>0</key>
991 <dict>
992 <key>name</key>
993 <string>punctuation.definition.string.shell</string>
994 </dict>
995 </dict>
996 <key>end</key>
997 <string>^\t*(\3)(?=\s|;|&amp;|$)</string>
998 <key>endCaptures</key>
999 <dict>
1000 <key>1</key>
1001 <dict>
1002 <key>name</key>
1003 <string>keyword.control.heredoc-token.shell</string>
1004 </dict>
1005 </dict>
1006 <key>name</key>
1007 <string>string.unquoted.heredoc.no-indent.shell</string>
1008 </dict>
1009 <dict>
1010 <key>begin</key>
1011 <string>(&lt;&lt;)\s*("|'|)\\?(\w+)\2</string>
1012 <key>beginCaptures</key>
1013 <dict>
1014 <key>1</key>
1015 <dict>
1016 <key>name</key>
1017 <string>keyword.operator.heredoc.shell</string>
1018 </dict>
1019 <key>3</key>
1020 <dict>
1021 <key>name</key>
1022 <string>keyword.control.heredoc-token.shell</string>
1023 </dict>
1024 </dict>
1025 <key>captures</key>
1026 <dict>
1027 <key>0</key>
1028 <dict>
1029 <key>name</key>
1030 <string>punctuation.definition.string.shell</string>
1031 </dict>
1032 </dict>
1033 <key>end</key>
1034 <string>^(\3)(?=\s|;|&amp;|$)</string>
1035 <key>endCaptures</key>
1036 <dict>
1037 <key>1</key>
1038 <dict>
1039 <key>name</key>
1040 <string>keyword.control.heredoc-token.shell</string>
1041 </dict>
1042 </dict>
1043 <key>name</key>
1044 <string>string.unquoted.heredoc.shell</string>
1045 </dict>
1046 </array>
1047 </dict>
1048 <key>herestring</key>
1049 <dict>
1050 <key>patterns</key>
1051 <array>
1052 <dict>
1053 <key>captures</key>
1054 <dict>
1055 <key>1</key>
1056 <dict>
1057 <key>name</key>
1058 <string>keyword.operator.herestring.shell</string>
1059 </dict>
1060 </dict>
1061 <key>match</key>
1062 <string>(&lt;&lt;&lt;)</string>
1063 <key>name</key>
1064 <string>meta.herestring.shell</string>
1065 </dict>
1066 </array>
1067 </dict>
1068 <key>interpolation</key>
1069 <dict>
1070 <key>patterns</key>
1071 <array>
1072 <dict>
1073 <key>begin</key>
1074 <string>\$\({2}</string>
1075 <key>beginCaptures</key>
1076 <dict>
1077 <key>0</key>
1078 <dict>
1079 <key>name</key>
1080 <string>punctuation.definition.string.begin.shell</string>
1081 </dict>
1082 </dict>
1083 <key>end</key>
1084 <string>\){2}</string>
1085 <key>endCaptures</key>
1086 <dict>
1087 <key>0</key>
1088 <dict>
1089 <key>name</key>
1090 <string>punctuation.definition.string.end.shell</string>
1091 </dict>
1092 </dict>
1093 <key>name</key>
1094 <string>string.other.math.shell</string>
1095 <key>patterns</key>
1096 <array>
1097 <dict>
1098 <key>include</key>
1099 <string>#math</string>
1100 </dict>
1101 </array>
1102 </dict>
1103 <dict>
1104 <key>begin</key>
1105 <string>`</string>
1106 <key>beginCaptures</key>
1107 <dict>
1108 <key>0</key>
1109 <dict>
1110 <key>name</key>
1111 <string>punctuation.definition.string.begin.shell</string>
1112 </dict>
1113 </dict>
1114 <key>end</key>
1115 <string>`</string>
1116 <key>endCaptures</key>
1117 <dict>
1118 <key>0</key>
1119 <dict>
1120 <key>name</key>
1121 <string>punctuation.definition.string.end.shell</string>
1122 </dict>
1123 </dict>
1124 <key>name</key>
1125 <string>string.interpolated.backtick.shell</string>
1126 <key>patterns</key>
1127 <array>
1128 <dict>
1129 <key>match</key>
1130 <string>\\[`\\$]</string>
1131 <key>name</key>
1132 <string>constant.character.escape.shell</string>
1133 </dict>
1134 <dict>
1135 <key>begin</key>
1136 <string>(?&lt;=^|;|&amp;|\s|`)(#)(?!\{)</string>
1137 <key>beginCaptures</key>
1138 <dict>
1139 <key>1</key>
1140 <dict>
1141 <key>name</key>
1142 <string>punctuation.definition.comment.shell</string>
1143 </dict>
1144 </dict>
1145 <key>end</key>
1146 <string>(?=`)|\n</string>
1147 <key>name</key>
1148 <string>comment.line.number-sign.shell</string>
1149 </dict>
1150 <dict>
1151 <key>include</key>
1152 <string>$self</string>
1153 </dict>
1154 </array>
1155 </dict>
1156 <dict>
1157 <key>begin</key>
1158 <string>\$\(</string>
1159 <key>beginCaptures</key>
1160 <dict>
1161 <key>0</key>
1162 <dict>
1163 <key>name</key>
1164 <string>punctuation.definition.string.begin.shell</string>
1165 </dict>
1166 </dict>
1167 <key>end</key>
1168 <string>\)</string>
1169 <key>endCaptures</key>
1170 <dict>
1171 <key>0</key>
1172 <dict>
1173 <key>name</key>
1174 <string>punctuation.definition.string.end.shell</string>
1175 </dict>
1176 </dict>
1177 <key>name</key>
1178 <string>string.interpolated.dollar.shell</string>
1179 <key>patterns</key>
1180 <array>
1181 <dict>
1182 <key>begin</key>
1183 <string>(?&lt;=^|;|&amp;|\s|\()(#)(?!\{)</string>
1184 <key>beginCaptures</key>
1185 <dict>
1186 <key>1</key>
1187 <dict>
1188 <key>name</key>
1189 <string>punctuation.definition.comment.shell</string>
1190 </dict>
1191 </dict>
1192 <key>end</key>
1193 <string>(?=\))|\n</string>
1194 <key>name</key>
1195 <string>comment.line.number-sign.shell</string>
1196 </dict>
1197 <dict>
1198 <key>include</key>
1199 <string>$self</string>
1200 </dict>
1201 </array>
1202 </dict>
1203 </array>
1204 </dict>
1205 <key>keyword</key>
1206 <dict>
1207 <key>patterns</key>
1208 <array>
1209 <dict>
1210 <key>match</key>
1211 <string>(?&lt;=^|;|&amp;|\s)(?:if|then|else|elif|fi|for|in|do|done|select|case|continue|esac|while|until|return|coproc)(?=\s|;|&amp;|$)</string>
1212 <key>name</key>
1213 <string>keyword.control.shell</string>
1214 </dict>
1215 <dict>
1216 <key>match</key>
1217 <string>(?&lt;=^|;|&amp;|\s)(?:export|declare|typeset|local|readonly)(?=\s|;|&amp;|$)</string>
1218 <key>name</key>
1219 <string>storage.modifier.shell</string>
1220 </dict>
1221 </array>
1222 </dict>
1223 <key>lines</key>
1224 <dict>
1225 <key>patterns</key>
1226 <array>
1227 <dict>
1228 <key>match</key>
1229 <string>\\\n</string>
1230 <key>name</key>
1231 <string>constant.character.escape.newline.shell</string>
1232 </dict>
1233 </array>
1234 </dict>
1235 <key>list</key>
1236 <dict>
1237 <key>patterns</key>
1238 <array>
1239 <dict>
1240 <key>match</key>
1241 <string>;|&amp;&amp;|&amp;|\|\|</string>
1242 <key>name</key>
1243 <string>keyword.operator.list.shell</string>
1244 </dict>
1245 </array>
1246 </dict>
1247 <key>logical-expression</key>
1248 <dict>
1249 <key>patterns</key>
1250 <array>
1251 <dict>
1252 <key>comment</key>
1253 <string>do we want a special rule for ( expr )?</string>
1254 <key>match</key>
1255 <string>=[=~]?|!=?|&lt;|&gt;|&amp;&amp;|\|\|</string>
1256 <key>name</key>
1257 <string>keyword.operator.logical.shell</string>
1258 </dict>
1259 <dict>
1260 <key>match</key>
1261 <string>(?&lt;!\S)-(nt|ot|ef|eq|ne|l[te]|g[te]|[a-hknoprstuwxzOGLSN])</string>
1262 <key>name</key>
1263 <string>keyword.operator.logical.shell</string>
1264 </dict>
1265 </array>
1266 </dict>
1267 <key>loop</key>
1268 <dict>
1269 <key>patterns</key>
1270 <array>
1271 <dict>
1272 <key>begin</key>
1273 <string>(?&lt;=^|;|&amp;|\s)(for)\s+(?=\({2})</string>
1274 <key>captures</key>
1275 <dict>
1276 <key>1</key>
1277 <dict>
1278 <key>name</key>
1279 <string>keyword.control.shell</string>
1280 </dict>
1281 </dict>
1282 <key>end</key>
1283 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1284 <key>name</key>
1285 <string>meta.scope.for-loop.shell</string>
1286 <key>patterns</key>
1287 <array>
1288 <dict>
1289 <key>include</key>
1290 <string>$self</string>
1291 </dict>
1292 </array>
1293 </dict>
1294 <dict>
1295 <key>begin</key>
1296 <string>(?&lt;=^|;|&amp;|\s)(for)\s+([^\s\\]+)(?=\s|;|&amp;|$)</string>
1297 <key>beginCaptures</key>
1298 <dict>
1299 <key>1</key>
1300 <dict>
1301 <key>name</key>
1302 <string>keyword.control.shell</string>
1303 </dict>
1304 <key>2</key>
1305 <dict>
1306 <key>name</key>
1307 <string>variable.other.loop.shell</string>
1308 </dict>
1309 </dict>
1310 <key>end</key>
1311 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1312 <key>endCaptures</key>
1313 <dict>
1314 <key>1</key>
1315 <dict>
1316 <key>name</key>
1317 <string>keyword.control.shell</string>
1318 </dict>
1319 </dict>
1320 <key>name</key>
1321 <string>meta.scope.for-in-loop.shell</string>
1322 <key>patterns</key>
1323 <array>
1324 <dict>
1325 <key>include</key>
1326 <string>$self</string>
1327 </dict>
1328 </array>
1329 </dict>
1330 <dict>
1331 <key>begin</key>
1332 <string>(?&lt;=^|;|&amp;|\s)(while|until)(?=\s|;|&amp;|$)</string>
1333 <key>captures</key>
1334 <dict>
1335 <key>1</key>
1336 <dict>
1337 <key>name</key>
1338 <string>keyword.control.shell</string>
1339 </dict>
1340 </dict>
1341 <key>end</key>
1342 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1343 <key>name</key>
1344 <string>meta.scope.while-loop.shell</string>
1345 <key>patterns</key>
1346 <array>
1347 <dict>
1348 <key>include</key>
1349 <string>$self</string>
1350 </dict>
1351 </array>
1352 </dict>
1353 <dict>
1354 <key>begin</key>
1355 <string>(?&lt;=^|;|&amp;|\s)(select)\s+([^\s\\]+)(?=\s|;|&amp;|$)</string>
1356 <key>beginCaptures</key>
1357 <dict>
1358 <key>1</key>
1359 <dict>
1360 <key>name</key>
1361 <string>keyword.control.shell</string>
1362 </dict>
1363 <key>2</key>
1364 <dict>
1365 <key>name</key>
1366 <string>variable.other.loop.shell</string>
1367 </dict>
1368 </dict>
1369 <key>end</key>
1370 <string>(?&lt;=^|;|&amp;|\s)(done)(?=\s|;|&amp;|$|\))</string>
1371 <key>endCaptures</key>
1372 <dict>
1373 <key>1</key>
1374 <dict>
1375 <key>name</key>
1376 <string>keyword.control.shell</string>
1377 </dict>
1378 </dict>
1379 <key>name</key>
1380 <string>meta.scope.select-block.shell</string>
1381 <key>patterns</key>
1382 <array>
1383 <dict>
1384 <key>include</key>
1385 <string>$self</string>
1386 </dict>
1387 </array>
1388 </dict>
1389 <dict>
1390 <key>begin</key>
1391 <string>(?&lt;=^|;|&amp;|\s)(case)(?=\s|;|&amp;|$)</string>
1392 <key>captures</key>
1393 <dict>
1394 <key>1</key>
1395 <dict>
1396 <key>name</key>
1397 <string>keyword.control.shell</string>
1398 </dict>
1399 </dict>
1400 <key>end</key>
1401 <string>(?&lt;=^|;|&amp;|\s)(esac)(?=\s|;|&amp;|$|\))</string>
1402 <key>name</key>
1403 <string>meta.scope.case-block.shell</string>
1404 <key>patterns</key>
1405 <array>
1406 <dict>
1407 <key>begin</key>
1408 <string>(?&lt;=^|;|&amp;|\s)(?:in)(?=\s|;|&amp;|$)</string>
1409 <key>beginCaptures</key>
1410 <dict>
1411 <key>1</key>
1412 <dict>
1413 <key>name</key>
1414 <string>keyword.control.shell</string>
1415 </dict>
1416 </dict>
1417 <key>end</key>
1418 <string>(?&lt;=^|;|&amp;|\s)(?=(?:esac)(?:\s|;|&amp;|$|\)))</string>
1419 <key>name</key>
1420 <string>meta.scope.case-body.shell</string>
1421 <key>patterns</key>
1422 <array>
1423 <dict>
1424 <key>include</key>
1425 <string>#comment</string>
1426 </dict>
1427 <dict>
1428 <key>include</key>
1429 <string>#case-clause</string>
1430 </dict>
1431 <dict>
1432 <key>include</key>
1433 <string>$self</string>
1434 </dict>
1435 </array>
1436 </dict>
1437 <dict>
1438 <key>include</key>
1439 <string>$self</string>
1440 </dict>
1441 </array>
1442 </dict>
1443 <dict>
1444 <key>begin</key>
1445 <string>(^|(?&lt;=[&amp;;|]))\s*(if)(?=\s|;|&amp;|$)</string>
1446 <key>beginCaptures</key>
1447 <dict>
1448 <key>2</key>
1449 <dict>
1450 <key>name</key>
1451 <string>keyword.control.shell</string>
1452 </dict>
1453 </dict>
1454 <key>comment</key>
1455 <string>Restrict match to avoid matching in lines like `dd if=/dev/sda1 …`</string>
1456 <key>end</key>
1457 <string>(?&lt;=^|;|&amp;|\s)(fi)(?=\s|;|&amp;|$|\))</string>
1458 <key>endCaptures</key>
1459 <dict>
1460 <key>1</key>
1461 <dict>
1462 <key>name</key>
1463 <string>keyword.control.shell</string>
1464 </dict>
1465 </dict>
1466 <key>name</key>
1467 <string>meta.scope.if-block.shell</string>
1468 <key>patterns</key>
1469 <array>
1470 <dict>
1471 <key>include</key>
1472 <string>$self</string>
1473 </dict>
1474 </array>
1475 </dict>
1476 </array>
1477 </dict>
1478 <key>math</key>
1479 <dict>
1480 <key>patterns</key>
1481 <array>
1482 <dict>
1483 <key>include</key>
1484 <string>#variable</string>
1485 </dict>
1486 <dict>
1487 <key>match</key>
1488 <string>\+{1,2}|-{1,2}|!|~|\*{1,2}|/|%|&lt;[&lt;=]?|&gt;[&gt;=]?|==|!=|\^|\|{1,2}|&amp;{1,2}|\?|\:|,|=|[*/%+\-&amp;^|]=|&lt;&lt;=|&gt;&gt;=</string>
1489 <key>name</key>
1490 <string>keyword.operator.arithmetic.shell</string>
1491 </dict>
1492 <dict>
1493 <key>match</key>
1494 <string>0[xX]\h+</string>
1495 <key>name</key>
1496 <string>constant.numeric.hex.shell</string>
1497 </dict>
1498 <dict>
1499 <key>match</key>
1500 <string>0\d+</string>
1501 <key>name</key>
1502 <string>constant.numeric.octal.shell</string>
1503 </dict>
1504 <dict>
1505 <key>match</key>
1506 <string>\d{1,2}#[0-9a-zA-Z@_]+</string>
1507 <key>name</key>
1508 <string>constant.numeric.other.shell</string>
1509 </dict>
1510 <dict>
1511 <key>match</key>
1512 <string>\d+</string>
1513 <key>name</key>
1514 <string>constant.numeric.integer.shell</string>
1515 </dict>
1516 </array>
1517 </dict>
1518 <key>pathname</key>
1519 <dict>
1520 <key>patterns</key>
1521 <array>
1522 <dict>
1523 <key>match</key>
1524 <string>(?&lt;=\s|:|=|^)~</string>
1525 <key>name</key>
1526 <string>keyword.operator.tilde.shell</string>
1527 </dict>
1528 <dict>
1529 <key>match</key>
1530 <string>\*|\?</string>
1531 <key>name</key>
1532 <string>keyword.operator.glob.shell</string>
1533 </dict>
1534 <dict>
1535 <key>begin</key>
1536 <string>([?*+@!])(\()</string>
1537 <key>beginCaptures</key>
1538 <dict>
1539 <key>1</key>
1540 <dict>
1541 <key>name</key>
1542 <string>keyword.operator.extglob.shell</string>
1543 </dict>
1544 <key>2</key>
1545 <dict>
1546 <key>name</key>
1547 <string>punctuation.definition.extglob.shell</string>
1548 </dict>
1549 </dict>
1550 <key>end</key>
1551 <string>(\))</string>
1552 <key>endCaptures</key>
1553 <dict>
1554 <key>1</key>
1555 <dict>
1556 <key>name</key>
1557 <string>punctuation.definition.extglob.shell</string>
1558 </dict>
1559 </dict>
1560 <key>name</key>
1561 <string>meta.structure.extglob.shell</string>
1562 <key>patterns</key>
1563 <array>
1564 <dict>
1565 <key>include</key>
1566 <string>$self</string>
1567 </dict>
1568 </array>
1569 </dict>
1570 </array>
1571 </dict>
1572 <key>pipeline</key>
1573 <dict>
1574 <key>patterns</key>
1575 <array>
1576 <dict>
1577 <key>match</key>
1578 <string>(?&lt;=^|;|&amp;|\s)(time)(?=\s|;|&amp;|$)</string>
1579 <key>name</key>
1580 <string>keyword.other.shell</string>
1581 </dict>
1582 <dict>
1583 <key>match</key>
1584 <string>[|!]</string>
1585 <key>name</key>
1586 <string>keyword.operator.pipe.shell</string>
1587 </dict>
1588 </array>
1589 </dict>
1590 <key>redirection</key>
1591 <dict>
1592 <key>patterns</key>
1593 <array>
1594 <dict>
1595 <key>begin</key>
1596 <string>[&gt;&lt;]\(</string>
1597 <key>beginCaptures</key>
1598 <dict>
1599 <key>0</key>
1600 <dict>
1601 <key>name</key>
1602 <string>punctuation.definition.string.begin.shell</string>
1603 </dict>
1604 </dict>
1605 <key>end</key>
1606 <string>\)</string>
1607 <key>endCaptures</key>
1608 <dict>
1609 <key>0</key>
1610 <dict>
1611 <key>name</key>
1612 <string>punctuation.definition.string.end.shell</string>
1613 </dict>
1614 </dict>
1615 <key>name</key>
1616 <string>string.interpolated.process-substitution.shell</string>
1617 <key>patterns</key>
1618 <array>
1619 <dict>
1620 <key>include</key>
1621 <string>$self</string>
1622 </dict>
1623 </array>
1624 </dict>
1625 <dict>
1626 <key>comment</key>
1627 <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>
1628 <key>match</key>
1629 <string>&amp;&gt;|\d*&gt;&amp;\d*|\d*(&gt;&gt;|&gt;|&lt;)|\d*&lt;&amp;|\d*&lt;&gt;</string>
1630 <key>name</key>
1631 <string>keyword.operator.redirect.shell</string>
1632 </dict>
1633 </array>
1634 </dict>
1635 <key>string</key>
1636 <dict>
1637 <key>patterns</key>
1638 <array>
1639 <dict>
1640 <key>match</key>
1641 <string>\\.</string>
1642 <key>name</key>
1643 <string>constant.character.escape.shell</string>
1644 </dict>
1645 <dict>
1646 <key>begin</key>
1647 <string>'</string>
1648 <key>beginCaptures</key>
1649 <dict>
1650 <key>0</key>
1651 <dict>
1652 <key>name</key>
1653 <string>punctuation.definition.string.begin.shell</string>
1654 </dict>
1655 </dict>
1656 <key>end</key>
1657 <string>'</string>
1658 <key>endCaptures</key>
1659 <dict>
1660 <key>0</key>
1661 <dict>
1662 <key>name</key>
1663 <string>punctuation.definition.string.end.shell</string>
1664 </dict>
1665 </dict>
1666 <key>name</key>
1667 <string>string.quoted.single.shell</string>
1668 </dict>
1669 <dict>
1670 <key>begin</key>
1671 <string>\$?"</string>
1672 <key>beginCaptures</key>
1673 <dict>
1674 <key>0</key>
1675 <dict>
1676 <key>name</key>
1677 <string>punctuation.definition.string.begin.shell</string>
1678 </dict>
1679 </dict>
1680 <key>end</key>
1681 <string>"</string>
1682 <key>endCaptures</key>
1683 <dict>
1684 <key>0</key>
1685 <dict>
1686 <key>name</key>
1687 <string>punctuation.definition.string.end.shell</string>
1688 </dict>
1689 </dict>
1690 <key>name</key>
1691 <string>string.quoted.double.shell</string>
1692 <key>patterns</key>
1693 <array>
1694 <dict>
1695 <key>match</key>
1696 <string>\\[\$`"\\\n]</string>
1697 <key>name</key>
1698 <string>constant.character.escape.shell</string>
1699 </dict>
1700 <dict>
1701 <key>include</key>
1702 <string>#variable</string>
1703 </dict>
1704 <dict>
1705 <key>include</key>
1706 <string>#interpolation</string>
1707 </dict>
1708 </array>
1709 </dict>
1710 <dict>
1711 <key>begin</key>
1712 <string>\$'</string>
1713 <key>beginCaptures</key>
1714 <dict>
1715 <key>0</key>
1716 <dict>
1717 <key>name</key>
1718 <string>punctuation.definition.string.begin.shell</string>
1719 </dict>
1720 </dict>
1721 <key>end</key>
1722 <string>'</string>
1723 <key>endCaptures</key>
1724 <dict>
1725 <key>0</key>
1726 <dict>
1727 <key>name</key>
1728 <string>punctuation.definition.string.end.shell</string>
1729 </dict>
1730 </dict>
1731 <key>name</key>
1732 <string>string.quoted.single.dollar.shell</string>
1733 <key>patterns</key>
1734 <array>
1735 <dict>
1736 <key>match</key>
1737 <string>\\(a|b|e|f|n|r|t|v|\\|')</string>
1738 <key>name</key>
1739 <string>constant.character.escape.ansi-c.shell</string>
1740 </dict>
1741 <dict>
1742 <key>match</key>
1743 <string>\\[0-9]{3}</string>
1744 <key>name</key>
1745 <string>constant.character.escape.octal.shell</string>
1746 </dict>
1747 <dict>
1748 <key>match</key>
1749 <string>\\x[0-9a-fA-F]{2}</string>
1750 <key>name</key>
1751 <string>constant.character.escape.hex.shell</string>
1752 </dict>
1753 <dict>
1754 <key>match</key>
1755 <string>\\c.</string>
1756 <key>name</key>
1757 <string>constant.character.escape.control-char.shell</string>
1758 </dict>
1759 </array>
1760 </dict>
1761 </array>
1762 </dict>
1763 <key>support</key>
1764 <dict>
1765 <key>patterns</key>
1766 <array>
1767 <dict>
1768 <key>match</key>
1769 <string>(?&lt;=^|;|&amp;|\s)(?::|\.)(?=\s|;|&amp;|$)</string>
1770 <key>name</key>
1771 <string>support.function.builtin.shell</string>
1772 </dict>
1773 <dict>
1774 <key>match</key>
1775 <string>(?&lt;=^|;|&amp;|\s)(?: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|mapfile|popd|printf|pushd|pwd|read(array)?|readonly|set|shift|shopt|source|suspend|test|times|trap|true|type|ulimit|umask|unalias|unset|wait)(?=\s|;|&amp;|$)</string>
1776 <key>name</key>
1777 <string>support.function.builtin.shell</string>
1778 </dict>
1779 </array>
1780 </dict>
1781 <key>variable</key>
1782 <dict>
1783 <key>patterns</key>
1784 <array>
1785 <dict>
1786 <key>captures</key>
1787 <dict>
1788 <key>1</key>
1789 <dict>
1790 <key>name</key>
1791 <string>punctuation.definition.variable.shell</string>
1792 </dict>
1793 </dict>
1794 <key>match</key>
1795 <string>(\$)[a-zA-Z_][a-zA-Z0-9_]*</string>
1796 <key>name</key>
1797 <string>variable.other.normal.shell</string>
1798 </dict>
1799 <dict>
1800 <key>captures</key>
1801 <dict>
1802 <key>1</key>
1803 <dict>
1804 <key>name</key>
1805 <string>punctuation.definition.variable.shell</string>
1806 </dict>
1807 </dict>
1808 <key>match</key>
1809 <string>(\$)[-*@#?$!0_]</string>
1810 <key>name</key>
1811 <string>variable.other.special.shell</string>
1812 </dict>
1813 <dict>
1814 <key>captures</key>
1815 <dict>
1816 <key>1</key>
1817 <dict>
1818 <key>name</key>
1819 <string>punctuation.definition.variable.shell</string>
1820 </dict>
1821 </dict>
1822 <key>match</key>
1823 <string>(\$)[1-9]</string>
1824 <key>name</key>
1825 <string>variable.other.positional.shell</string>
1826 </dict>
1827 <dict>
1828 <key>begin</key>
1829 <string>\$\{</string>
1830 <key>captures</key>
1831 <dict>
1832 <key>0</key>
1833 <dict>
1834 <key>name</key>
1835 <string>punctuation.definition.variable.shell</string>
1836 </dict>
1837 </dict>
1838 <key>end</key>
1839 <string>\}</string>
1840 <key>name</key>
1841 <string>variable.other.bracket.shell</string>
1842 <key>patterns</key>
1843 <array>
1844 <dict>
1845 <key>match</key>
1846 <string>!|:[-=?+]?|\*|@|#{1,2}|%{1,2}|/</string>
1847 <key>name</key>
1848 <string>keyword.operator.expansion.shell</string>
1849 </dict>
1850 <dict>
1851 <key>captures</key>
1852 <dict>
1853 <key>1</key>
1854 <dict>
1855 <key>name</key>
1856 <string>punctuation.section.array.shell</string>
1857 </dict>
1858 <key>3</key>
1859 <dict>
1860 <key>name</key>
1861 <string>punctuation.section.array.shell</string>
1862 </dict>
1863 </dict>
1864 <key>match</key>
1865 <string>(\[)([^\]]+)(\])</string>
1866 </dict>
1867 <dict>
1868 <key>include</key>
1869 <string>#string</string>
1870 </dict>
1871 <dict>
1872 <key>include</key>
1873 <string>#variable</string>
1874 </dict>
1875 <dict>
1876 <key>include</key>
1877 <string>#interpolation</string>
1878 </dict>
1879 </array>
1880 </dict>
1881 </array>
1882 </dict>
1883 </dict>
1884 <key>scopeName</key>
1885 <string>source.shell</string>
1886 <key>uuid</key>
1887 <string>DDEEA3ED-6B1C-11D9-8B10-000D93589AF6</string>
1888</dict>
1889</plist>