1ZSHEXPN(1)                  General Commands Manual                 ZSHEXPN(1)
2
3
4

NAME

6       zshexpn - zsh expansion and substitution
7

DESCRIPTION

9       The  following types of expansions are performed in the indicated order
10       in five steps:
11
12       History Expansion
13              This is performed only in interactive shells.
14
15       Alias Expansion
16              Aliases are expanded immediately  before  the  command  line  is
17              parsed as explained under Aliasing in zshmisc(1).
18
19       Process Substitution
20       Parameter Expansion
21       Command Substitution
22       Arithmetic Expansion
23       Brace Expansion
24              These  five are performed in left-to-right fashion.  On each ar‐
25              gument, any of the five steps that are needed are performed  one
26              after the other.  Hence, for example, all the parts of parameter
27              expansion are completed before command substitution is  started.
28              After  these expansions, all unquoted occurrences of the charac‐
29              ters `\',`'' and `"' are removed.
30
31       Filename Expansion
32              If the SH_FILE_EXPANSION option is set, the order  of  expansion
33              is  modified  for  compatibility  with sh and ksh.  In that case
34              filename expansion is performed immediately after  alias  expan‐
35              sion, preceding the set of five expansions mentioned above.
36
37       Filename Generation
38              This expansion, commonly referred to as globbing, is always done
39              last.
40
41       The following sections explain the types of expansion in detail.
42

HISTORY EXPANSION

44       History expansion allows you to use words from previous  command  lines
45       in  the  command line you are typing.  This simplifies spelling correc‐
46       tions and the repetition of complicated commands or arguments.
47
48       Immediately before execution, each command  is  saved  in  the  history
49       list,  the  size of which is controlled by the HISTSIZE parameter.  The
50       one most recent command is always retained in  any  case.   Each  saved
51       command in the history list is called a history event and is assigned a
52       number, beginning with 1 (one) when the shell starts up.   The  history
53       number  that  you  may  see in your prompt (see EXPANSION OF PROMPT SE‐
54       QUENCES in zshmisc(1)) is the number that is to be assigned to the next
55       command.
56
57   Overview
58       A  history  expansion  begins with the first character of the histchars
59       parameter, which is `!' by default, and may occur anywhere on the  com‐
60       mand line, including inside double quotes (but not inside single quotes
61       '...' or C-style quotes $'...' nor when escaped with a backslash).
62
63       The first character is followed by an optional  event  designator  (see
64       the  section  `Event Designators') and then an optional word designator
65       (the section `Word Designators'); if neither of  these  designators  is
66       present, no history expansion occurs.
67
68       Input  lines  containing  history expansions are echoed after being ex‐
69       panded, but before any other expansions take place and before the  com‐
70       mand  is  executed.   It  is this expanded form that is recorded as the
71       history event for later references.
72
73       History expansions do not nest.
74
75       By default, a history reference with no event designator refers to  the
76       same  event as any preceding history reference on that command line; if
77       it is the only history reference in a command, it refers to the  previ‐
78       ous  command.   However,  if the option CSH_JUNKIE_HISTORY is set, then
79       every history reference with no event specification  always  refers  to
80       the previous command.
81
82       For  example,  `!' is the event designator for the previous command, so
83       `!!:1' always refers to the first word of  the  previous  command,  and
84       `!!$'  always  refers  to  the last word of the previous command.  With
85       CSH_JUNKIE_HISTORY set, then `!:1' and `!$' function in the same manner
86       as  `!!:1'  and `!!$', respectively.  Conversely, if CSH_JUNKIE_HISTORY
87       is unset, then `!:1' and `!$' refer to the first and  last  words,  re‐
88       spectively,  of  the same event referenced by the nearest other history
89       reference preceding them on the current command line, or to the  previ‐
90       ous command if there is no preceding reference.
91
92       The  character  sequence  `^foo^bar'  (where `^' is actually the second
93       character of the histchars parameter) repeats the last command, replac‐
94       ing  the string foo with bar.  More precisely, the sequence `^foo^bar^'
95       is synonymous with `!!:s^foo^bar^', hence other modifiers (see the sec‐
96       tion   `Modifiers')   may   follow   the  final  `^'.   In  particular,
97       `^foo^bar^:G' performs a global substitution.
98
99       If the shell encounters the character sequence `!"' in the  input,  the
100       history  mechanism  is temporarily disabled until the current list (see
101       zshmisc(1)) is fully parsed.  The `!"' is removed from the  input,  and
102       any subsequent `!' characters have no special significance.
103
104       A  less convenient but more comprehensible form of command history sup‐
105       port is provided by the fc builtin.
106
107   Event Designators
108       An event designator is a reference to a command-line entry in the  his‐
109       tory  list.   In  the list below, remember that the initial `!' in each
110       item may be changed to another character by setting the  histchars  pa‐
111       rameter.
112
113       !      Start a history expansion, except when followed by a blank, new‐
114              line, `=' or `('.  If followed immediately by a word  designator
115              (see  the section `Word Designators'), this forms a history ref‐
116              erence with no event designator (see the section `Overview').
117
118       !!     Refer to the previous command.  By itself,  this  expansion  re‐
119              peats the previous command.
120
121       !n     Refer to command-line n.
122
123       !-n    Refer to the current command-line minus n.
124
125       !str   Refer to the most recent command starting with str.
126
127       !?str[?]
128              Refer  to  the most recent command containing str.  The trailing
129              `?' is necessary if this reference is to be followed by a  modi‐
130              fier  or  followed by any text that is not to be considered part
131              of str.
132
133       !#     Refer to the current command line typed in so far.  The line  is
134              treated  as if it were complete up to and including the word be‐
135              fore the one with the `!#' reference.
136
137       !{...} Insulate a history reference from adjacent characters (if neces‐
138              sary).
139
140   Word Designators
141       A word designator indicates which word or words of a given command line
142       are to be included in a history reference.  A `:' usually separates the
143       event  specification  from the word designator.  It may be omitted only
144       if the word designator begins with a `^', `$', `*', `-' or  `%'.   Word
145       designators include:
146
147       0      The first input word (command).
148       n      The nth argument.
149       ^      The first argument.  That is, 1.
150       $      The last argument.
151       %      The word matched by (the most recent) ?str search.
152       x-y    A range of words; x defaults to 0.
153       *      All the arguments, or a null value if there are none.
154       x*     Abbreviates `x-$'.
155       x-     Like `x*' but omitting word $.
156
157       Note  that  a  `%' word designator works only when used in one of `!%',
158       `!:%' or `!?str?:%', and only when used after a !? expansion  (possibly
159       in  an  earlier  command).  Anything else results in an error, although
160       the error may not be the most obvious one.
161
162   Modifiers
163       After the optional word designator, you can add a sequence  of  one  or
164       more  of  the following modifiers, each preceded by a `:'.  These modi‐
165       fiers also work on the result of filename generation and parameter  ex‐
166       pansion, except where noted.
167
168       a      Turn  a  file  name into an absolute path:  prepends the current
169              directory, if necessary; remove `.' path  segments;  and  remove
170              `..'  path  segments  and  the segments that immediately precede
171              them.
172
173              This transformation is agnostic about what is in the filesystem,
174              i.e.  is  on  the logical, not the physical directory.  It takes
175              place in the same manner as when changing directories when  nei‐
176              ther of the options CHASE_DOTS or CHASE_LINKS is set.  For exam‐
177              ple, `/before/here/../after'  is  always  transformed  to  `/be‐
178              fore/after', regardless of whether `/before/here' exists or what
179              kind of object (dir, file, symlink, etc.) it is.
180
181       A      Turn a file name into an absolute path as the `a' modifier does,
182              and  then  pass the result through the realpath(3) library func‐
183              tion to resolve symbolic links.
184
185              Note: on systems that do not have a  realpath(3)  library  func‐
186              tion,  symbolic  links are not resolved, so on those systems `a'
187              and `A' are equivalent.
188
189              Note: foo:A and realpath(foo) are different on some inputs.  For
190              realpath(foo) semantics, see the `P` modifier.
191
192       c      Resolve  a  command  name into an absolute path by searching the
193              command path given by the PATH variable.  This does not work for
194              commands  containing  directory parts.  Note also that this does
195              not usually work as a glob qualifier unless a file of  the  same
196              name is found in the current directory.
197
198       e      Remove  all but the part of the filename extension following the
199              `.'; see the definition of the filename  extension  in  the  de‐
200              scription  of the r modifier below.  Note that according to that
201              definition the result will be empty if the string  ends  with  a
202              `.'.
203
204       h [ digits ]
205              Remove a trailing pathname component, shortening the path by one
206              directory level: this is the `head' of the pathname.  This works
207              like  `dirname'.  If the h is followed immediately (with no spa‐
208              ces or other separator) by any number of decimal digits, and the
209              value  of the resulting number is non-zero, that number of lead‐
210              ing components is preserved instead of the final component being
211              removed.   In an absolute path the leading `/' is the first com‐
212              ponent, so,  for  example,  if  var=/my/path/to/something,  then
213              ${var:h3}  substitutes  /my/path.   Consecutive `/'s are treated
214              the same as a single `/'.  In parameter substitution, digits may
215              only  be used if the expression is in braces, so for example the
216              short form substitution $var:h2 is treated as ${var:h}2, not  as
217              ${var:h2}.   No restriction applies to the use of digits in his‐
218              tory substitution or globbing qualifiers.   If  more  components
219              are  requested  than are present, the entire path is substituted
220              (so this does not trigger a `failed modifier' error  in  history
221              expansion).
222
223       l      Convert the words to all lowercase.
224
225       p      Print  the  new  command but do not execute it.  Only works with
226              history expansion.
227
228       P      Turn a file name into an absolute path, like  realpath(3).   The
229              resulting  path  will be absolute, will refer to the same direc‐
230              tory entry as the input filename, and  none  of  its  components
231              will be symbolic links or equal to `.' or `..'.
232
233              Unlike realpath(3), non-existent trailing components are permit‐
234              ted and preserved.
235
236       q      Quote the substituted  words,  escaping  further  substitutions.
237              Works with history expansion and parameter expansion, though for
238              parameters it is only useful if the  resulting  text  is  to  be
239              re-evaluated such as by eval.
240
241       Q      Remove one level of quotes from the substituted words.
242
243       r      Remove a filename extension leaving the root name.  Strings with
244              no filename extension are not altered.  A filename extension  is
245              a `.' followed by any number of characters (including zero) that
246              are neither `.' nor `/' and that continue  to  the  end  of  the
247              string.  For example, the extension of `foo.orig.c' is `.c', and
248              `dir.c/foo' has no extension.
249
250       s/l/r[/]
251              Substitute r for l as described below.  The substitution is done
252              only  for  the  first string that matches l.  For arrays and for
253              filename generation, this applies to each word of  the  expanded
254              text.  See below for further notes on substitutions.
255
256              The  forms  `gs/l/r' and `s/l/r/:G' perform global substitution,
257              i.e. substitute every occurrence of r for l.  Note that the g or
258              :G must appear in exactly the position shown.
259
260              See further notes on this form of substitution below.
261
262       &      Repeat the previous s substitution.  Like s, may be preceded im‐
263              mediately by a g.  In parameter expansion the & must appear  in‐
264              side braces, and in filename generation it must be quoted with a
265              backslash.
266
267       t [ digits ]
268              Remove all leading pathname components, leaving the final compo‐
269              nent  (tail).  This works like `basename'.  Any trailing slashes
270              are first removed.  Decimal  digits  are  handled  as  described
271              above  for  (h), but in this case that number of trailing compo‐
272              nents is preserved instead of the default 1; 0  is  treated  the
273              same as 1.
274
275       u      Convert the words to all uppercase.
276
277       x      Like  q, but break into words at whitespace.  Does not work with
278              parameter expansion.
279
280       The s/l/r/ substitution works as follows.   By  default  the  left-hand
281       side  of  substitutions  are  not patterns, but character strings.  Any
282       character can be used as the delimiter in place of  `/'.   A  backslash
283       quotes   the   delimiter   character.    The   character  `&',  in  the
284       right-hand-side r, is replaced by the text from the  left-hand-side  l.
285       The  `&'  can  be  quoted with a backslash.  A null l uses the previous
286       string either from the previous l or from the contextual scan string  s
287       from  `!?s'.  You can omit the rightmost delimiter if a newline immedi‐
288       ately follows r; the rightmost `?' in a context scan can  similarly  be
289       omitted.  Note the same record of the last l and r is maintained across
290       all forms of expansion.
291
292       Note that if a `&' is used within glob qualifiers an extra backslash is
293       needed as a & is a special character in this case.
294
295       Also  note that the order of expansions affects the interpretation of l
296       and r.  When used in a history expansion, which occurs before any other
297       expansions, l and r are treated as literal strings (except as explained
298       for HIST_SUBST_PATTERN below).  When used in parameter  expansion,  the
299       replacement of r into the parameter's value is done first, and then any
300       additional process, parameter, command, arithmetic, or brace references
301       are applied, which may evaluate those substitutions and expansions more
302       than once if l appears more than once in the starting value.  When used
303       in a glob qualifier, any substitutions or expansions are performed once
304       at the time the qualifier is parsed, even before  the  `:s'  expression
305       itself is divided into l and r sides.
306
307       If  the  option HIST_SUBST_PATTERN is set, l is treated as a pattern of
308       the usual form described in  the  section  FILENAME  GENERATION  below.
309       This can be used in all the places where modifiers are available; note,
310       however, that in globbing qualifiers parameter substitution has already
311       taken  place,  so parameters in the replacement string should be quoted
312       to ensure they are replaced at the correct time.  Note also  that  com‐
313       plicated  patterns  used  in  globbing qualifiers may need the extended
314       glob qualifier notation (#q:s/.../.../) in order for the shell to  rec‐
315       ognize the expression as a glob qualifier.  Further, note that bad pat‐
316       terns in the substitution are not subject to the NO_BAD_PATTERN  option
317       so will cause an error.
318
319       When  HIST_SUBST_PATTERN  is set, l may start with a # to indicate that
320       the pattern must match at the start of the string  to  be  substituted,
321       and a % may appear at the start or after an # to indicate that the pat‐
322       tern must match at the end of the string to be substituted.  The % or #
323       may be quoted with two backslashes.
324
325       For  example,  the following piece of filename generation code with the
326       EXTENDED_GLOB option:
327
328              print -r -- *.c(#q:s/#%(#b)s(*).c/'S${match[1]}.C'/)
329
330       takes the expansion of *.c and  applies  the  glob  qualifiers  in  the
331       (#q...)  expression, which consists of a substitution modifier anchored
332       to the start and end of each word (#%).  This turns  on  backreferences
333       ((#b)), so that the parenthesised subexpression is available in the re‐
334       placement string as ${match[1]}.  The replacement string is  quoted  so
335       that the parameter is not substituted before the start of filename gen‐
336       eration.
337
338       The following f, F, w and W modifiers work only with  parameter  expan‐
339       sion and filename generation.  They are listed here to provide a single
340       point of reference for all modifiers.
341
342       f      Repeats the immediately (without a colon) following modifier un‐
343              til the resulting word doesn't change any more.
344
345       F:expr:
346              Like  f,  but repeats only n times if the expression expr evalu‐
347              ates to n.  Any character can be used instead  of  the  `:';  if
348              `(',  `[',  or `{' is used as the opening delimiter, the closing
349              delimiter should be ')', `]', or `}', respectively.
350
351       w      Makes the immediately following modifier work on  each  word  in
352              the string.
353
354       W:sep: Like  w  but  words are considered to be the parts of the string
355              that are separated by sep. Any character can be used instead  of
356              the `:'; opening parentheses are handled specially, see above.
357

PROCESS SUBSTITUTION

359       Each  part  of  a  command  argument  that  takes  the  form `<(list)',
360       `>(list)' or `=(list)' is subject to process substitution.  The expres‐
361       sion  may be preceded or followed by other strings except that, to pre‐
362       vent clashes with commonly occurring strings  and  patterns,  the  last
363       form  must  occur at the start of a command argument, and the forms are
364       only expanded when  first  parsing  command  or  assignment  arguments.
365       Process  substitutions  may be used following redirection operators; in
366       this case, the substitution must appear with no trailing string.
367
368       Note that `<<(list)' is not a special syntax; it is  equivalent  to  `<
369       <(list)', redirecting standard input from the result of process substi‐
370       tution.  Hence all the following  documentation  applies.   The  second
371       form (with the space) is recommended for clarity.
372
373       In the case of the < or > forms, the shell runs the commands in list as
374       a subprocess of the job executing the shell command line.  If the  sys‐
375       tem supports the /dev/fd mechanism, the command argument is the name of
376       the device file corresponding to a file descriptor; otherwise,  if  the
377       system  supports  named  pipes  (FIFOs), the command argument will be a
378       named pipe.  If the form with > is selected then writing on  this  spe‐
379       cial  file  will  provide  input for list.  If < is used, then the file
380       passed as an argument will be connected  to  the  output  of  the  list
381       process.  For example,
382
383              paste <(cut -f1 file1) <(cut -f3 file2) |
384              tee >(process1) >(process2) >/dev/null
385
386       cuts fields 1 and 3 from the files file1 and file2 respectively, pastes
387       the results together, and  sends  it  to  the  processes  process1  and
388       process2.
389
390       If  =(...)  is used instead of <(...), then the file passed as an argu‐
391       ment will be the name of a temporary file containing the output of  the
392       list  process.   This  may  be used instead of the < form for a program
393       that expects to lseek (see lseek(2)) on the input file.
394
395       There is an optimisation for substitutions of the form =(<<<arg), where
396       arg is a single-word argument to the here-string redirection <<<.  This
397       form produces a file name containing the value of arg after any substi‐
398       tutions  have been performed.  This is handled entirely within the cur‐
399       rent shell.  This is  effectively  the  reverse  of  the  special  form
400       $(<arg) which treats arg as a file name and replaces it with the file's
401       contents.
402
403       The = form is useful as both the /dev/fd and the named pipe implementa‐
404       tion of <(...) have drawbacks.  In the former case, some programmes may
405       automatically close the file descriptor in  question  before  examining
406       the file on the command line, particularly if this is necessary for se‐
407       curity reasons such as when the programme is running  setuid.   In  the
408       second case, if the programme does not actually open the file, the sub‐
409       shell attempting to read from or write to the pipe will (in  a  typical
410       implementation,  different  operating systems may have different behav‐
411       iour) block for ever and have to be killed explicitly.  In both  cases,
412       the  shell actually supplies the information using a pipe, so that pro‐
413       grammes that expect to lseek (see lseek(2)) on the file will not work.
414
415       Also note that the previous example can be  more  compactly  and  effi‐
416       ciently written (provided the MULTIOS option is set) as:
417
418              paste <(cut -f1 file1) <(cut -f3 file2) > >(process1) > >(process2)
419
420       The  shell  uses  pipes  instead  of  FIFOs to implement the latter two
421       process substitutions in the above example.
422
423       There is an additional problem with >(process); when this  is  attached
424       to  an  external command, the parent shell does not wait for process to
425       finish and hence an immediately following command cannot  rely  on  the
426       results  being  complete.  The problem and solution are the same as de‐
427       scribed in the section MULTIOS in zshmisc(1).  Hence  in  a  simplified
428       version of the example above:
429
430              paste <(cut -f1 file1) <(cut -f3 file2) > >(process)
431
432       (note that no MULTIOS are involved), process will be run asynchronously
433       as far as the parent shell is concerned.  The workaround is:
434
435              { paste <(cut -f1 file1) <(cut -f3 file2) } > >(process)
436
437       The extra processes here are spawned from the parent shell  which  will
438       wait for their completion.
439
440       Another problem arises any time a job with a substitution that requires
441       a temporary file is disowned by the shell,  including  the  case  where
442       `&!' or `&|' appears at the end of a command containing a substitution.
443       In that case the temporary file will not be cleaned up as the shell  no
444       longer  has  any memory of the job.  A workaround is to use a subshell,
445       for example,
446
447              (mycmd =(myoutput)) &!
448
449       as the forked subshell will wait for the command to finish then  remove
450       the temporary file.
451
452       A  general  workaround  to ensure a process substitution endures for an
453       appropriate length of time is to pass it as a parameter to an anonymous
454       shell  function  (a  piece  of  shell code that is run immediately with
455       function scope).  For example, this code:
456
457              () {
458                 print File $1:
459                 cat $1
460              } =(print This be the verse)
461
462       outputs something resembling the following
463
464              File /tmp/zsh6nU0kS:
465              This be the verse
466
467       The temporary file created by the process substitution will be  deleted
468       when the function exits.
469

PARAMETER EXPANSION

471       The  character `$' is used to introduce parameter expansions.  See zsh‐
472       param(1) for a description of parameters, including arrays, associative
473       arrays, and subscript notation to access individual array elements.
474
475       Note  in  particular the fact that words of unquoted parameters are not
476       automatically split on whitespace unless the  option  SH_WORD_SPLIT  is
477       set;  see references to this option below for more details.  This is an
478       important difference from other shells.  However, as in  other  shells,
479       null words are elided from unquoted parameters' expansions.
480
481       With default options, after the assignments:
482
483              array=("first word" "" "third word")
484              scalar="only word"
485
486       then  $array  substitutes two words, `first word' and `third word', and
487       $scalar substitutes a single word `only word'.  Note that  second  ele‐
488       ment of array was elided.  Scalar parameters can be elided too if their
489       value is null (empty).  To  avoid  elision,  use  quoting  as  follows:
490       "$scalar"  for  scalars  and "${array[@]}" or "${(@)array}" for arrays.
491       (The last two forms are equivalent.)
492
493       Parameter expansions can involve flags, as  in  `${(@kv)aliases}',  and
494       other  operators,  such as `${PREFIX:-"/usr/local"}'.  Parameter expan‐
495       sions can also be nested.  These topics will be introduced below.   The
496       full rules are complicated and are noted at the end.
497
498       In  the  expansions discussed below that require a pattern, the form of
499       the pattern is the same as that used for filename generation;  see  the
500       section  `Filename  Generation'.   Note that these patterns, along with
501       the replacement text of any substitutions, are  themselves  subject  to
502       parameter  expansion,  command  substitution, and arithmetic expansion.
503       In addition to the following operations, the colon modifiers  described
504       in  the  section  `Modifiers' in the section `History Expansion' can be
505       applied:  for example, ${i:s/foo/bar/} performs string substitution  on
506       the expansion of parameter $i.
507
508       In  the  following descriptions, `word' refers to a single word substi‐
509       tuted on the command line, not necessarily a space delimited word.
510
511       ${name}
512              The value, if any, of the parameter name  is  substituted.   The
513              braces are required if the expansion is to be followed by a let‐
514              ter, digit, or underscore that is not to be interpreted as  part
515              of  name.   In  addition, more complicated forms of substitution
516              usually require the braces to be present; exceptions, which only
517              apply  if  the  option  KSH_ARRAYS is not set, are a single sub‐
518              script or any colon modifiers appearing after the name,  or  any
519              of the characters `^', `=', `~', `#' or `+' appearing before the
520              name, all of which work with or without braces.
521
522              If name is an array parameter, and the KSH_ARRAYS option is  not
523              set,  then the value of each element of name is substituted, one
524              element per word.  Otherwise, the expansion results in one  word
525              only;  with  KSH_ARRAYS,  this is the first element of an array.
526              No  field  splitting  is  done  on   the   result   unless   the
527              SH_WORD_SPLIT   option  is  set.   See  also  the  flags  =  and
528              s:string:.
529
530       ${+name}
531              If name is the name of a set parameter `1' is substituted,  oth‐
532              erwise `0' is substituted.
533
534       ${name-word}
535       ${name:-word}
536              If  name is set, or in the second form is non-null, then substi‐
537              tute its value; otherwise substitute word.  In the  second  form
538              name may be omitted, in which case word is always substituted.
539
540       ${name+word}
541       ${name:+word}
542              If  name is set, or in the second form is non-null, then substi‐
543              tute word; otherwise substitute nothing.
544
545       ${name=word}
546       ${name:=word}
547       ${name::=word}
548              In the first form, if name is unset then set it to word; in  the
549              second  form,  if name is unset or null then set it to word; and
550              in the third form, unconditionally set name  to  word.   In  all
551              forms, the value of the parameter is then substituted.
552
553       ${name?word}
554       ${name:?word}
555              In the first form, if name is set, or in the second form if name
556              is both set and non-null, then substitute its value;  otherwise,
557              print  word and exit from the shell.  Interactive shells instead
558              return to the prompt.  If word is omitted, then a standard  mes‐
559              sage is printed.
560
561       In  any of the above expressions that test a variable and substitute an
562       alternate word, note that you can use standard  shell  quoting  in  the
563       word   value   to  selectively  override  the  splitting  done  by  the
564       SH_WORD_SPLIT option and the = flag, but not splitting by the s:string:
565       flag.
566
567       In  the  following expressions, when name is an array and the substitu‐
568       tion is not quoted, or if the `(@)' flag or the name[@] syntax is used,
569       matching and replacement is performed on each array element separately.
570
571       ${name#pattern}
572       ${name##pattern}
573              If  the pattern matches the beginning of the value of name, then
574              substitute the value of name with the matched  portion  deleted;
575              otherwise,  just  substitute  the  value  of name.  In the first
576              form, the smallest matching pattern is preferred; in the  second
577              form, the largest matching pattern is preferred.
578
579       ${name%pattern}
580       ${name%%pattern}
581              If  the  pattern matches the end of the value of name, then sub‐
582              stitute the value of name with the matched portion deleted; oth‐
583              erwise,  just  substitute the value of name.  In the first form,
584              the smallest matching pattern is preferred; in the second  form,
585              the largest matching pattern is preferred.
586
587       ${name:#pattern}
588              If  the  pattern  matches the value of name, then substitute the
589              empty string; otherwise, just substitute the value of name.   If
590              name  is  an  array the matching array elements are removed (use
591              the `(M)' flag to remove the non-matched elements).
592
593       ${name:|arrayname}
594              If arrayname is the name (N.B., not contents) of an array  vari‐
595              able,  then any elements contained in arrayname are removed from
596              the substitution of name.  If the substitution is scalar, either
597              because  name  is a scalar variable or the expression is quoted,
598              the elements of arrayname are instead tested against the  entire
599              expression.
600
601       ${name:*arrayname}
602              Similar  to  the  preceding  substitution,  but  in the opposite
603              sense, so that entries present in both the original substitution
604              and as elements of arrayname are retained and others removed.
605
606       ${name:^arrayname}
607       ${name:^^arrayname}
608              Zips  two arrays, such that the output array is twice as long as
609              the shortest (longest for `:^^') of name and arrayname, with the
610              elements  alternatingly being picked from them. For `:^', if one
611              of the input arrays is longer, the output will stop when the end
612              of the shorter array is reached.  Thus,
613
614                     a=(1 2 3 4); b=(a b); print ${a:^b}
615
616              will  output  `1  a 2 b'.  For `:^^', then the input is repeated
617              until all of the longer array has been used  up  and  the  above
618              will output `1 a 2 b 3 a 4 b'.
619
620              Either  or  both inputs may be a scalar, they will be treated as
621              an array of length 1 with the scalar as the only element. If ei‐
622              ther array is empty, the other array is output with no extra el‐
623              ements inserted.
624
625              Currently the following code will output `a b' and  `1'  as  two
626              separate  elements,  which  can  be unexpected. The second print
627              provides a workaround which should continue to work if  this  is
628              changed.
629
630                     a=(a b); b=(1 2); print -l "${a:^b}"; print -l "${${a:^b}}"
631
632       ${name:offset}
633       ${name:offset:length}
634              This  syntax  gives effects similar to parameter subscripting in
635              the form $name[start,end], but is compatible with other  shells;
636              note  that  both  offset  and length are interpreted differently
637              from the components of a subscript.
638
639              If offset is non-negative, then if the variable name is a scalar
640              substitute  the  contents  starting  offset  characters from the
641              first character of the string, and if name is an  array  substi‐
642              tute  elements  starting offset elements from the first element.
643              If length is given, substitute that many characters or elements,
644              otherwise the entire rest of the scalar or array.
645
646              A positive offset is always treated as the offset of a character
647              or element in name from the first character or  element  of  the
648              array  (this  is  different from native zsh subscript notation).
649              Hence 0 refers to the first character or element  regardless  of
650              the setting of the option KSH_ARRAYS.
651
652              A negative offset counts backwards from the end of the scalar or
653              array, so that -1 corresponds to the last character or  element,
654              and so on.
655
656              When positive, length counts from the offset position toward the
657              end of the scalar or array.  When negative, length  counts  back
658              from  the  end.  If this results in a position smaller than off‐
659              set, a diagnostic is printed and nothing is substituted.
660
661              The option MULTIBYTE is obeyed, i.e. the offset and length count
662              multibyte characters where appropriate.
663
664              offset and length undergo the same set of shell substitutions as
665              for scalar assignment; in addition, they  are  then  subject  to
666              arithmetic evaluation.  Hence, for example
667
668                     print ${foo:3}
669                     print ${foo: 1 + 2}
670                     print ${foo:$(( 1 + 2))}
671                     print ${foo:$(echo 1 + 2)}
672
673              all  have the same effect, extracting the string starting at the
674              fourth character of $foo if the substitution would otherwise re‐
675              turn  a  scalar,  or the array starting at the fourth element if
676              $foo would return an array.  Note that with the  option  KSH_AR‐
677              RAYS  $foo always returns a scalar (regardless of the use of the
678              offset syntax) and a form such as ${foo[*]:3} is required to ex‐
679              tract elements of an array named foo.
680
681              If  offset  is  negative, the - may not appear immediately after
682              the : as this indicates the ${name:-word} form of  substitution.
683              Instead,  a  space  may  be inserted before the -.  Furthermore,
684              neither offset nor length may begin with an alphabetic character
685              or  & as these are used to indicate history-style modifiers.  To
686              substitute a value from a variable, the recommended approach  is
687              to  precede it with a $ as this signifies the intention (parame‐
688              ter substitution can easily be rendered unreadable); however, as
689              arithmetic  substitution  is  performed,  the  expression ${var:
690              offs} does work, retrieving the offset from $offs.
691
692              For further compatibility with other shells there is  a  special
693              case  for  array offset 0.  This usually accesses the first ele‐
694              ment of the array.  However, if the substitution refers  to  the
695              positional parameter array, e.g. $@ or $*, then offset 0 instead
696              refers to $0, offset 1 refers to $1, and so on.  In other words,
697              the  positional  parameter  array  is  effectively  extended  by
698              prepending $0.  Hence ${*:0:1} substitutes $0 and ${*:1:1}  sub‐
699              stitutes $1.
700
701       ${name/pattern/repl}
702       ${name//pattern/repl}
703       ${name:/pattern/repl}
704              Replace  the  longest possible match of pattern in the expansion
705              of parameter name by string repl.  The first form replaces  just
706              the  first  occurrence, the second form all occurrences, and the
707              third form replaces only if pattern matches the  entire  string.
708              Both pattern and repl are subject to double-quoted substitution,
709              so that expressions like ${name/$opat/$npat} will work, but obey
710              the  usual rule that pattern characters in $opat are not treated
711              specially unless either the option GLOB_SUBST is set,  or  $opat
712              is instead substituted as ${~opat}.
713
714              The pattern may begin with a `#', in which case the pattern must
715              match at the start of the string, or `%', in which case it  must
716              match  at  the end of the string, or `#%' in which case the pat‐
717              tern must match the entire string.  The repl  may  be  an  empty
718              string,  in  which  case  the final `/' may also be omitted.  To
719              quote the final `/' in other cases it should be  preceded  by  a
720              single backslash; this is not necessary if the `/' occurs inside
721              a substituted parameter.  Note also that the `#',  `%'  and  `#%
722              are  not  active  if  they occur inside a substituted parameter,
723              even at the start.
724
725              If, after quoting rules apply, ${name} expands to an array,  the
726              replacements  act  on  each element individually.  Note also the
727              effect of the I and S parameter expansion flags below;  however,
728              the flags M, R, B, E and N are not useful.
729
730              For example,
731
732                     foo="twinkle twinkle little star" sub="t*e" rep="spy"
733                     print ${foo//${~sub}/$rep}
734                     print ${(S)foo//${~sub}/$rep}
735
736              Here, the `~' ensures that the text of $sub is treated as a pat‐
737              tern rather than a plain string.  In the first case, the longest
738              match for t*e is substituted and the result is `spy star', while
739              in the second case, the shortest matches are taken and  the  re‐
740              sult is `spy spy lispy star'.
741
742       ${#spec}
743              If spec is one of the above substitutions, substitute the length
744              in characters of the result instead of the  result  itself.   If
745              spec  is  an array expression, substitute the number of elements
746              of the result.  This has the side-effect that joining is skipped
747              even  in quoted forms, which may affect other sub-expressions in
748              spec.  Note that `^', `=', and `~', below, must  appear  to  the
749              left of `#' when these forms are combined.
750
751              If the option POSIX_IDENTIFIERS is not set, and spec is a simple
752              name, then the braces are optional; this is true even  for  spe‐
753              cial  parameters  so  e.g.  $#-  and  $#* take the length of the
754              string $- and the array $* respectively.   If  POSIX_IDENTIFIERS
755              is set, then braces are required for the # to be treated in this
756              fashion.
757
758       ${^spec}
759       ${^^spec}
760              Turn on the RC_EXPAND_PARAM option for the evaluation  of  spec;
761              if  the  `^'  is doubled, turn it off.  When this option is set,
762              array expansions of the form foo${xx}bar, where the parameter xx
763              is  set  to  (a  b  c),  are  substituted  with `fooabar foobbar
764              foocbar' instead of the default `fooa b  cbar'.   Note  that  an
765              empty array will therefore cause all arguments to be removed.
766
767              Internally, each such expansion is converted into the equivalent
768              list   for   brace    expansion.     E.g.,    ${^var}    becomes
769              {$var[1],$var[2],...}, and is processed as described in the sec‐
770              tion `Brace Expansion' below: note, however, the expansion  hap‐
771              pens  immediately,  with  any explicit brace expansion happening
772              later.  If word splitting is also  in  effect  the  $var[N]  may
773              themselves be split into different list elements.
774
775       ${=spec}
776       ${==spec}
777              Perform  word splitting using the rules for SH_WORD_SPLIT during
778              the evaluation of spec, but regardless of whether the  parameter
779              appears  in  double  quotes; if the `=' is doubled, turn it off.
780              This forces parameter expansions to be split into separate words
781              before  substitution, using IFS as a delimiter.  This is done by
782              default in most other shells.
783
784              Note that splitting is applied to word in the  assignment  forms
785              of  spec  before  the assignment to name is performed.  This af‐
786              fects the result of array assignments with the A flag.
787
788       ${~spec}
789       ${~~spec}
790              Turn on the GLOB_SUBST option for the evaluation of spec; if the
791              `~'  is  doubled,  turn  it  off.   When this option is set, the
792              string resulting from the expansion will  be  interpreted  as  a
793              pattern anywhere that is possible, such as in filename expansion
794              and filename generation and pattern-matching contexts  like  the
795              right hand side of the `=' and `!=' operators in conditions.
796
797              In  nested  substitutions, note that the effect of the ~ applies
798              to the result of the current level of substitution.  A surround‐
799              ing  pattern  operation on the result may cancel it.  Hence, for
800              example, if the parameter foo is set to  *,  ${~foo//\*/*.c}  is
801              substituted  by  the pattern *.c, which may be expanded by file‐
802              name  generation,  but  ${${~foo}//\*/*.c}  substitutes  to  the
803              string *.c, which will not be further expanded.
804
805       If  a ${...} type parameter expression or a $(...) type command substi‐
806       tution is used in place of name above, it is expanded first and the re‐
807       sult  is  used as if it were the value of name.  Thus it is possible to
808       perform nested operations:  ${${foo#head}%tail} substitutes  the  value
809       of  $foo  with both `head' and `tail' deleted.  The form with $(...) is
810       often useful in combination with the flags described next; see the  ex‐
811       amples  below.  Each name or nested ${...} in a parameter expansion may
812       also be followed by a subscript expression as described in Array Param‐
813       eters in zshparam(1).
814
815       Note  that double quotes may appear around nested expressions, in which
816       case  only  the  part  inside  is  treated  as  quoted;  for   example,
817       ${(f)"$(foo)"} quotes the result of $(foo), but the flag `(f)' (see be‐
818       low) is applied using the rules for unquoted expansions.  Note  further
819       that  quotes  are  themselves  nested  in this context; for example, in
820       "${(@f)"$(foo)"}", there are two sets of quotes,  one  surrounding  the
821       whole  expression,  the other (redundant) surrounding the $(foo) as be‐
822       fore.
823
824   Parameter Expansion Flags
825       If the opening brace is directly followed by  an  opening  parenthesis,
826       the  string  up  to the matching closing parenthesis will be taken as a
827       list of flags.  In cases where repeating a flag is meaningful, the rep‐
828       etitions need not be consecutive; for example, `(q%q%q)' means the same
829       thing as the more readable `(%%qqq)'.  The  following  flags  are  sup‐
830       ported:
831
832       #      Evaluate  the  resulting words as numeric expressions and inter‐
833              pret these as character codes.  Output the corresponding charac‐
834              ters.   Note that this form is entirely distinct from use of the
835              # without parentheses.
836
837              If the MULTIBYTE option is set and the number  is  greater  than
838              127  (i.e.  not  an  ASCII character) it is treated as a Unicode
839              character.
840
841       %      Expand all % escapes in the resulting words in the same  way  as
842              in prompts (see EXPANSION OF PROMPT SEQUENCES in zshmisc(1)). If
843              this flag is given twice, full prompt expansion is done  on  the
844              resulting words, depending on the setting of the PROMPT_PERCENT,
845              PROMPT_SUBST and PROMPT_BANG options.
846
847       @      In double quotes, array elements are put  into  separate  words.
848              E.g.,   `"${(@)foo}"'   is   equivalent   to  `"${foo[@]}"'  and
849              `"${(@)foo[1,2]}"' is the same as `"$foo[1]"  "$foo[2]"'.   This
850              is  distinct  from field splitting by the f, s or z flags, which
851              still applies within each array element.
852
853       A      Convert the substitution into an array expression,  even  if  it
854              otherwise  would be scalar.  This has lower precedence than sub‐
855              scripting, so one level of nested expansion is required in order
856              that  subscripts apply to array elements.  Thus ${${(A)name}[1]}
857              yields the full value of name when name is scalar.
858
859              This assigns an array parameter with `${...=...}', `${...:=...}'
860              or  `${...::=...}'.   If this flag is repeated (as in `AA'), as‐
861              signs an associative array parameter.  Assignment is made before
862              sorting  or padding; if field splitting is active, the word part
863              is split before assignment.  The name part may be a  subscripted
864              range  for ordinary arrays; when assigning an associative array,
865              the word part must be converted to an array, for example by  us‐
866              ing `${(AA)=name=...}' to activate field splitting.
867
868              Surrounding  context  such  as  additional nesting or use of the
869              value in a scalar assignment may cause the array  to  be  joined
870              back into a single string again.
871
872       a      Sort  in  array  index order; when combined with `O' sort in re‐
873              verse array index order.  Note that `a' is therefore  equivalent
874              to  the default but `Oa' is useful for obtaining an array's ele‐
875              ments in reverse order.
876
877       b      Quote with backslashes only characters that are special to  pat‐
878              tern  matching. This is useful when the contents of the variable
879              are to be tested using GLOB_SUBST, including the ${~...} switch.
880
881              Quoting using one of the q family of flags  does  not  work  for
882              this  purpose  since  quotes  are  not stripped from non-pattern
883              characters by GLOB_SUBST.  In other words,
884
885                     pattern=${(q)str}
886                     [[ $str = ${~pattern} ]]
887
888              works if $str is `a*b' but not if it is `a b', whereas
889
890                     pattern=${(b)str}
891                     [[ $str = ${~pattern} ]]
892
893              is always true for any possible value of $str.
894
895       c      With ${#name}, count the total number of characters in an array,
896              as  if  the elements were concatenated with spaces between them.
897              This is not a true join of the array, so other expressions  used
898              with  this  flag may have an effect on the elements of the array
899              before it is counted.
900
901       C      Capitalize the resulting words.  `Words' in this case refers  to
902              sequences  of  alphanumeric characters separated by non-alphanu‐
903              merics, not to words that result from field splitting.
904
905       D      Assume the string or array elements contain directories and  at‐
906              tempt to substitute the leading part of these by names.  The re‐
907              mainder of the path (the whole of it if the leading part was not
908              substituted) is then quoted so that the whole string can be used
909              as a shell argument.  This is the reverse of  `~'  substitution:
910              see the section FILENAME EXPANSION below.
911
912       e      Perform  single  word  shell expansions, namely parameter expan‐
913              sion, command substitution and arithmetic expansion, on the  re‐
914              sult.  Such  expansions can be nested but too deep recursion may
915              have unpredictable effects.
916
917       f      Split the result of the expansion at newlines. This is a  short‐
918              hand for `ps:\n:'.
919
920       F      Join  the words of arrays together using newline as a separator.
921              This is a shorthand for `pj:\n:'.
922
923       g:opts:
924              Process escape sequences like the echo builtin when  no  options
925              are  given (g::).  With the o option, octal escapes don't take a
926              leading zero.  With the c option, sequences like `^X'  are  also
927              processed.   With the e option, processes `\M-t' and similar se‐
928              quences like the print builtin.  With both of the o  and  e  op‐
929              tions,  behaves  like  the  print builtin except that in none of
930              these modes is `\c' interpreted.
931
932       i      Sort case-insensitively.  May be combined with `n' or `O'.
933
934       k      If name refers to an associative array, substitute the keys (el‐
935              ement  names) rather than the values of the elements.  Used with
936              subscripts (including ordinary arrays), force indices or keys to
937              be  substituted  even  if  the  subscript form refers to values.
938              However, this flag may not be combined  with  subscript  ranges.
939              With  the KSH_ARRAYS option a subscript `[*]' or `[@]' is needed
940              to operate on the whole array, as usual.
941
942       L      Convert all letters in the result to lower case.
943
944       n      Sort decimal integers numerically; if the first differing  char‐
945              acters  of  two test strings are not digits, sorting is lexical.
946              `+' and `-' are not treated specially; they are treated  as  any
947              other  non-digit.   Integers with more initial zeroes are sorted
948              before those with fewer or none.  Hence the array  `foo+24  foo1
949              foo02  foo2  foo3  foo20  foo23' is sorted into the order shown.
950              May be combined with `i' or `O'.
951
952       -      As n, but a leading minus sign indicates a negative decimal  in‐
953              teger.  A leading minus sign not followed by an integer does not
954              trigger numeric sorting.  Note that `+' signs  are  not  handled
955              specially (this may change in the future).
956
957       o      Sort  the resulting words in ascending order; if this appears on
958              its own the sorting is lexical and  case-sensitive  (unless  the
959              locale renders it case-insensitive).  Sorting in ascending order
960              is the default for other forms of sorting, so this is ignored if
961              combined with `a', `i', `n' or `-'.
962
963       O      Sort  the  resulting words in descending order; `O' without `a',
964              `i', `n' or `-' sorts in reverse lexical order.  May be combined
965              with `a', `i', `n' or `-' to reverse the order of sorting.
966
967       P      This forces the value of the parameter name to be interpreted as
968              a further parameter name, whose value will be used where  appro‐
969              priate.   Note  that flags set with one of the typeset family of
970              commands (in particular case transformations) are not applied to
971              the value of name used in this fashion.
972
973              If used with a nested parameter or command substitution, the re‐
974              sult of that will be taken as a parameter name in the same  way.
975              For  example,  if  you have `foo=bar' and `bar=baz', the strings
976              ${(P)foo}, ${(P)${foo}}, and ${(P)$(echo bar)} will be  expanded
977              to `baz'.
978
979              Likewise, if the reference is itself nested, the expression with
980              the flag is treated as if it were directly replaced by  the  pa‐
981              rameter  name.   It is an error if this nested substitution pro‐
982              duces an array  with  more  than  one  word.   For  example,  if
983              `name=assoc'  where the parameter assoc is an associative array,
984              then `${${(P)name}[elt]}' refers to the element of the  associa‐
985              tive subscripted `elt'.
986
987       q      Quote  characters that are special to the shell in the resulting
988              words with backslashes; unprintable or  invalid  characters  are
989              quoted  using  the  $'\NNN'  form, with separate quotes for each
990              octet.
991
992              If this flag is given twice, the resulting words are  quoted  in
993              single  quotes  and  if  it  is given three times, the words are
994              quoted in double quotes; in these forms no special  handling  of
995              unprintable  or invalid characters is attempted.  If the flag is
996              given four times, the words are quoted in single quotes preceded
997              by  a  $.  Note that in all three of these forms quoting is done
998              unconditionally, even if this does not change the  way  the  re‐
999              sulting string would be interpreted by the shell.
1000
1001              If a q- is given (only a single q may appear), a minimal form of
1002              single quoting is used that only quotes the string if needed  to
1003              protect  special characters.  Typically this form gives the most
1004              readable output.
1005
1006              If a q+ is given, an extended form of minimal  quoting  is  used
1007              that  causes unprintable characters to be rendered using $'...'.
1008              This quoting is similar to that used by the output of values  by
1009              the typeset family of commands.
1010
1011       Q      Remove one level of quotes from the resulting words.
1012
1013       t      Use  a  string  describing  the  type of the parameter where the
1014              value of the parameter would usually appear.  This  string  con‐
1015              sists  of keywords separated by hyphens (`-'). The first keyword
1016              in the string  describes  the  main  type,  it  can  be  one  of
1017              `scalar',  `array',  `integer',  `float'  or  `association'. The
1018              other keywords describe the type in more detail:
1019
1020              local  for local parameters
1021
1022              left   for left justified parameters
1023
1024              right_blanks
1025                     for right justified parameters with leading blanks
1026
1027              right_zeros
1028                     for right justified parameters with leading zeros
1029
1030              lower  for parameters whose value is converted to all lower case
1031                     when it is expanded
1032
1033              upper  for parameters whose value is converted to all upper case
1034                     when it is expanded
1035
1036              readonly
1037                     for readonly parameters
1038
1039              tag    for tagged parameters
1040
1041              tied   for parameters tied to another parameter in the manner of
1042                     PATH  (colon-separated  list)  and  path (array), whether
1043                     these are special parameters or user-defined with  `type‐
1044                     set -T'
1045
1046              export for exported parameters
1047
1048              unique for arrays which keep only the first occurrence of dupli‐
1049                     cated values
1050
1051              hide   for parameters with the `hide' flag
1052
1053              hideval
1054                     for parameters with the `hideval' flag
1055
1056              special
1057                     for special parameters defined by the shell
1058
1059       u      Expand only the first occurrence of each unique word.
1060
1061       U      Convert all letters in the result to upper case.
1062
1063       v      Used with k, substitute (as two consecutive words) both the  key
1064              and the value of each associative array element.  Used with sub‐
1065              scripts, force values to be substituted even  if  the  subscript
1066              form refers to indices or keys.
1067
1068       V      Make any special characters in the resulting words visible.
1069
1070       w      With  ${#name}, count words in arrays or strings; the s flag may
1071              be used to set a word delimiter.
1072
1073       W      Similar to w with the difference that empty  words  between  re‐
1074              peated delimiters are also counted.
1075
1076       X      With  this  flag,  parsing  errors occurring with the Q, e and #
1077              flags or the pattern matching forms  such  as  `${name#pattern}'
1078              are reported.  Without the flag, errors are silently ignored.
1079
1080       z      Split the result of the expansion into words using shell parsing
1081              to find the words, i.e. taking into account any quoting  in  the
1082              value.   Comments  are  not  treated  specially  but as ordinary
1083              strings, similar to interactive shells with the INTERACTIVE_COM‐
1084              MENTS  option  unset  (however, see the Z flag below for related
1085              options)
1086
1087              Note that this is done very late,  even  later  than  the  `(s)'
1088              flag.  So to access single words in the result use nested expan‐
1089              sions as in `${${(z)foo}[2]}'. Likewise, to remove the quotes in
1090              the resulting words use `${(Q)${(z)foo}}'.
1091
1092       0      Split  the  result  of  the  expansion on null bytes.  This is a
1093              shorthand for `ps:\0:'.
1094
1095       The following flags (except p) are followed by one or more arguments as
1096       shown.  Any character, or the matching pairs `(...)', `{...}', `[...]',
1097       or `<...>', may be used in place of a colon  as  delimiters,  but  note
1098       that when a flag takes more than one argument, a matched pair of delim‐
1099       iters must surround each argument.
1100
1101       p      Recognize the same escape sequences  as  the  print  builtin  in
1102              string arguments to any of the flags described below that follow
1103              this argument.
1104
1105              Alternatively, with this option string arguments may be  in  the
1106              form  $var  in  which  case the value of the variable is substi‐
1107              tuted.  Note this form is strict; the string argument  does  not
1108              undergo general parameter expansion.
1109
1110              For example,
1111
1112                     sep=:
1113                     val=a:b:c
1114                     print ${(ps.$sep.)val}
1115
1116              splits the variable on a :.
1117
1118       ~      Strings  inserted  into  the expansion by any of the flags below
1119              are to be treated as patterns.  This applies to the string argu‐
1120              ments of flags that follow ~ within the same set of parentheses.
1121              Compare with ~ outside parentheses, which forces the entire sub‐
1122              stituted string to be treated as a pattern.  Hence, for example,
1123
1124                     [[ "?" = ${(~j.|.)array} ]]
1125
1126              treats  `|' as a pattern and succeeds if and only if $array con‐
1127              tains the string `?' as an element.  The ~ may  be  repeated  to
1128              toggle  the  behaviour;  its effect only lasts to the end of the
1129              parenthesised group.
1130
1131       j:string:
1132              Join the words of arrays together using string as  a  separator.
1133              Note  that  this  occurs before field splitting by the s:string:
1134              flag or the SH_WORD_SPLIT option.
1135
1136       l:expr::string1::string2:
1137              Pad the resulting words on the left.  Each word  will  be  trun‐
1138              cated if required and placed in a field expr characters wide.
1139
1140              The arguments :string1: and :string2: are optional; neither, the
1141              first, or both may be given.  Note that the same pairs of delim‐
1142              iters  must  be used for each of the three arguments.  The space
1143              to the left will be filled with string1 (concatenated  as  often
1144              as  needed)  or spaces if string1 is not given.  If both string1
1145              and string2 are given, string2 is inserted once directly to  the
1146              left  of  each  word,  truncated if necessary, before string1 is
1147              used to produce any remaining padding.
1148
1149              If either of string1 or string2 is present but empty, i.e. there
1150              are  two  delimiters together at that point, the first character
1151              of $IFS is used instead.
1152
1153              If the MULTIBYTE option is in effect, the flag  m  may  also  be
1154              given,  in which case widths will be used for the calculation of
1155              padding; otherwise individual multibyte characters  are  treated
1156              as occupying one unit of width.
1157
1158              If  the  MULTIBYTE  option  is  not  in effect, each byte in the
1159              string is treated as occupying one unit of width.
1160
1161              Control characters are always assumed to be one unit wide;  this
1162              allows  the  mechanism  to be used for generating repetitions of
1163              control characters.
1164
1165       m      Only useful together with one of the flags l or r or with the  #
1166              length operator when the MULTIBYTE option is in effect.  Use the
1167              character width reported by the system in calculating  how  much
1168              of  the  string it occupies or the overall length of the string.
1169              Most printable characters have a width of one unit, however cer‐
1170              tain  Asian character sets and certain special effects use wider
1171              characters; combining characters have zero width.  Non-printable
1172              characters are arbitrarily counted as zero width; how they would
1173              actually be displayed will vary.
1174
1175              If the m is repeated, the character either counts  zero  (if  it
1176              has zero width), else one.  For printable character strings this
1177              has the effect of counting the number of glyphs  (visibly  sepa‐
1178              rate characters), except for the case where combining characters
1179              themselves have non-zero width (true in certain alphabets).
1180
1181       r:expr::string1::string2:
1182              As l, but pad the words on the right and insert string2  immedi‐
1183              ately to the right of the string to be padded.
1184
1185              Left  and  right padding may be used together.  In this case the
1186              strategy is to apply left padding to the  first  half  width  of
1187              each  of  the  resulting  words, and right padding to the second
1188              half.  If the string to be padded has odd width the  extra  pad‐
1189              ding is applied on the left.
1190
1191       s:string:
1192              Force  field  splitting  at  the  separator string.  Note that a
1193              string of two or more characters means that  all  of  them  must
1194              match  in  sequence;  this  differs from the treatment of two or
1195              more characters in the IFS parameter.  See also the =  flag  and
1196              the  SH_WORD_SPLIT option.  An empty string may also be given in
1197              which case every character will be a separate element.
1198
1199              For historical reasons, the usual behaviour that empty array el‐
1200              ements  are retained inside double quotes is disabled for arrays
1201              generated by splitting; hence the following:
1202
1203                     line="one::three"
1204                     print -l "${(s.:.)line}"
1205
1206              produces two lines of output for one and three  and  elides  the
1207              empty  field.  To override this behaviour, supply the `(@)' flag
1208              as well, i.e.  "${(@s.:.)line}".
1209
1210       Z:opts:
1211              As z but takes a combination of option letters between a follow‐
1212              ing pair of delimiter characters.  With no options the effect is
1213              identical to z.  The following options are available:
1214
1215              (Z+c+) causes comments to be parsed as a  string  and  retained;
1216                     any  field  in  the resulting array beginning with an un‐
1217                     quoted comment character is a comment.
1218
1219              (Z+C+) causes comments to be parsed and removed.  The  rule  for
1220                     comments  is  standard:  anything between a word starting
1221                     with the third character of $HISTCHARS, default #, up  to
1222                     the next newline is a comment.
1223
1224              (Z+n+) causes unquoted newlines to be treated as ordinary white‐
1225                     space, else they are treated as if they  are  shell  code
1226                     delimiters and converted to semicolons.
1227
1228              Options  are  combined  within  the same set of delimiters, e.g.
1229              (Z+Cn+).
1230
1231       _:flags:
1232              The underscore (_) flag is reserved for future use.  As of  this
1233              revision of zsh, there are no valid flags; anything following an
1234              underscore, other than an empty pair of delimiters,  is  treated
1235              as an error, and the flag itself has no effect.
1236
1237       The  following  flags  are meaningful with the ${...#...} or ${...%...}
1238       forms.  The S, I, and * flags may also  be  used  with  the  ${.../...}
1239       forms.
1240
1241       S      With  #  or  ##, search for the match that starts closest to the
1242              start of the string (a `substring match'). Of all matches  at  a
1243              particular position, # selects the shortest and ## the longest:
1244
1245                     % str="aXbXc"
1246                     % echo ${(S)str#X*}
1247                     abXc
1248                     % echo ${(S)str##X*}
1249                     a
1250                     %
1251
1252              With  %  or  %%, search for the match that starts closest to the
1253              end of the string:
1254
1255                     % str="aXbXc"
1256                     % echo ${(S)str%X*}
1257                     aXbc
1258                     % echo ${(S)str%%X*}
1259                     aXb
1260                     %
1261
1262              (Note that % and %% don't search for the match that ends closest
1263              to the end of the string, as one might expect.)
1264
1265              With  substitution  via  ${.../...}  or  ${...//...},  specifies
1266              non-greedy matching, i.e. that the shortest instead of the long‐
1267              est match should be replaced:
1268
1269                     % str="abab"
1270                     % echo ${str/*b/_}
1271                     _
1272                     % echo ${(S)str/*b/_}
1273                     _ab
1274                     %
1275
1276       I:expr:
1277              Search  the  exprth  match  (where  expr evaluates to a number).
1278              This only applies when searching for substrings, either with the
1279              S  flag,  or  with  ${.../...} (only the exprth match is substi‐
1280              tuted) or ${...//...} (all matches from the exprth on  are  sub‐
1281              stituted).  The default is to take the first match.
1282
1283              The  exprth  match  is  counted such that there is either one or
1284              zero matches from each starting position in the string, although
1285              for  global  substitution  matches overlapping previous replace‐
1286              ments are ignored.  With the ${...%...} and  ${...%%...}  forms,
1287              the starting position for the match moves backwards from the end
1288              as the index increases, while with the other forms it moves for‐
1289              ward from the start.
1290
1291              Hence with the string
1292                     which switch is the right switch for Ipswich?
1293              substitutions  of  the form ${(SI:N:)string#w*ch} as N increases
1294              from 1 will match  and  remove  `which',  `witch',  `witch'  and
1295              `wich';  the form using `##' will match and remove `which switch
1296              is the right switch for Ipswich', `witch is the right switch for
1297              Ipswich',  `witch  for  Ipswich'  and `wich'. The form using `%'
1298              will remove the same matches as for `#', but in  reverse  order,
1299              and the form using `%%' will remove the same matches as for `##'
1300              in reverse order.
1301
1302       *      Enable  EXTENDED_GLOB  for  substitution   via   ${.../...}   or
1303              ${...//...}.  Note that `**' does not disable extendedglob.
1304
1305       B      Include the index of the beginning of the match in the result.
1306
1307       E      Include the index one character past the end of the match in the
1308              result (note this is inconsistent with other uses  of  parameter
1309              index).
1310
1311       M      Include the matched portion in the result.
1312
1313       N      Include the length of the match in the result.
1314
1315       R      Include the unmatched portion in the result (the Rest).
1316
1317   Rules
1318       Here  is  a  summary  of  the rules for substitution; this assumes that
1319       braces are present around the substitution, i.e. ${...}.  Some particu‐
1320       lar  examples are given below.  Note that the Zsh Development Group ac‐
1321       cepts no responsibility for any brain damage which may occur during the
1322       reading of the following rules.
1323
1324       1. Nested substitution
1325              If  multiple  nested  ${...}  forms are present, substitution is
1326              performed from the inside outwards.  At each level, the  substi‐
1327              tution takes account of whether the current value is a scalar or
1328              an array, whether the whole substitution is  in  double  quotes,
1329              and  what  flags  are supplied to the current level of substitu‐
1330              tion, just as if the nested  substitution  were  the  outermost.
1331              The  flags are not propagated up to enclosing substitutions; the
1332              nested substitution will return either a scalar or an  array  as
1333              determined by the flags, possibly adjusted for quoting.  All the
1334              following steps take place where applicable  at  all  levels  of
1335              substitution.
1336
1337              Note  that,  unless the `(P)' flag is present, the flags and any
1338              subscripts apply directly to the value of the  nested  substitu‐
1339              tion;  for  example, the expansion ${${foo}} behaves exactly the
1340              same as ${foo}.  When the `(P)' flag is present in a nested sub‐
1341              stitution, the other substitution rules are applied to the value
1342              before it is interpreted as a name, so ${${(P)foo}}  may  differ
1343              from ${(P)foo}.
1344
1345              At  each nested level of substitution, the substituted words un‐
1346              dergo all forms of single-word substitution (i.e.  not  filename
1347              generation),  including  command substitution, arithmetic expan‐
1348              sion and filename expansion (i.e. leading ~ and =).   Thus,  for
1349              example,  ${${:-=cat}:h}  expands to the directory where the cat
1350              program resides.  (Explanation: the internal substitution has no
1351              parameter  but  a default value =cat, which is expanded by file‐
1352              name expansion to a full path; the outer substitution  then  ap‐
1353              plies the modifier :h and takes the directory part of the path.)
1354
1355       2. Internal parameter flags
1356              Any  parameter  flags  set  by one of the typeset family of com‐
1357              mands, in particular the -L, -R, -Z, -u and -l options for  pad‐
1358              ding  and  capitalization, are applied directly to the parameter
1359              value.  Note these flags are options to the command, e.g. `type‐
1360              set  -Z'; they are not the same as the flags used within parame‐
1361              ter substitutions.
1362
1363              At the outermost level of substitution, the `(P)' flag (rule 4.)
1364              ignores  these  transformations and uses the unmodified value of
1365              the parameter as the name to be replaced.  This is  usually  the
1366              desired  behavior  because  padding may make the value syntacti‐
1367              cally illegal as a parameter name, but if capitalization changes
1368              are desired, use the ${${(P)foo}} form (rule 25.).
1369
1370       3. Parameter subscripting
1371              If the value is a raw parameter reference with a subscript, such
1372              as ${var[3]}, the effect of subscripting is applied directly  to
1373              the  parameter.   Subscripts are evaluated left to right; subse‐
1374              quent subscripts apply to the scalar or array value  yielded  by
1375              the  previous  subscript.  Thus if var is an array, ${var[1][2]}
1376              is the second character of the first word, but ${var[2,4][2]} is
1377              the entire third word (the second word of the range of words two
1378              through four of the original array).  Any number  of  subscripts
1379              may  appear.   Flags such as `(k)' and `(v)' which alter the re‐
1380              sult of subscripting are applied.
1381
1382       4. Parameter name replacement
1383              At the outermost level of nesting only, the `(P)'  flag  is  ap‐
1384              plied.   This treats the value so far as a parameter name (which
1385              may include a subscript expression) and replaces that  with  the
1386              corresponding value.  This replacement occurs later if the `(P)'
1387              flag appears in a nested substitution.
1388
1389              If the value so far names a parameter that  has  internal  flags
1390              (rule 2.), those internal flags are applied to the new value af‐
1391              ter replacement.
1392
1393       5. Double-quoted joining
1394              If the value after this process is an array, and  the  substitu‐
1395              tion  appears  in double quotes, and neither an `(@)' flag nor a
1396              `#' length operator is present at the current level, then  words
1397              of  the value are joined with the first character of the parame‐
1398              ter $IFS, by default a space, between each word (single word ar‐
1399              rays  are  not modified).  If the `(j)' flag is present, that is
1400              used for joining instead of $IFS.
1401
1402       6. Nested subscripting
1403              Any remaining subscripts (i.e. of  a  nested  substitution)  are
1404              evaluated  at this point, based on whether the value is an array
1405              or a scalar.  As with 3., multiple subscripts can appear.   Note
1406              that  ${foo[2,4][2]} is thus equivalent to ${${foo[2,4]}[2]} and
1407              also to "${${(@)foo[2,4]}[2]}" (the nested substitution  returns
1408              an  array  in  both  cases), but not to "${${foo[2,4]}[2]}" (the
1409              nested substitution returns a scalar because of the quotes).
1410
1411       7. Modifiers
1412              Any modifiers, as specified by a trailing `#', `%', `/'  (possi‐
1413              bly  doubled)  or  by a set of modifiers of the form `:...' (see
1414              the section `Modifiers' in the section `History Expansion'), are
1415              applied to the words of the value at this level.
1416
1417       8. Character evaluation
1418              Any  `(#)' flag is applied, evaluating the result so far numeri‐
1419              cally as a character.
1420
1421       9. Length
1422              Any initial `#' modifier, i.e. in the form ${#var}, is  used  to
1423              evaluate the length of the expression so far.
1424
1425       10. Forced joining
1426              If  the  `(j)'  flag is present, or no `(j)' flag is present but
1427              the string is to be split as given by rule 11., and joining  did
1428              not take place at rule 5., any words in the value are joined to‐
1429              gether using the given string or the first character of $IFS  if
1430              none.  Note that the `(F)' flag implicitly supplies a string for
1431              joining in this manner.
1432
1433       11. Simple word splitting
1434              If one of the `(s)' or `(f)' flags are present, or the `=' spec‐
1435              ifier  was  present  (e.g. ${=var}), the word is split on occur‐
1436              rences of the specified string, or (for = with  neither  of  the
1437              two flags present) any of the characters in $IFS.
1438
1439              If  no `(s)', `(f)' or `=' was given, but the word is not quoted
1440              and the option SH_WORD_SPLIT is set, the word is split on occur‐
1441              rences  of  any of the characters in $IFS.  Note this step, too,
1442              takes place at all levels of a nested substitution.
1443
1444       12. Case modification
1445              Any case modification from one of  the  flags  `(L)',  `(U)'  or
1446              `(C)' is applied.
1447
1448       13. Escape sequence replacement
1449              First  any  replacements from the `(g)' flag are performed, then
1450              any prompt-style formatting from the `(%)' family  of  flags  is
1451              applied.
1452
1453       14. Quote application
1454              Any quoting or unquoting using `(q)' and `(Q)' and related flags
1455              is applied.
1456
1457       15. Directory naming
1458              Any directory name substitution using `(D)' flag is applied.
1459
1460       16. Visibility enhancement
1461              Any modifications to make characters  visible  using  the  `(V)'
1462              flag are applied.
1463
1464       17. Lexical word splitting
1465              If  the  '(z)'  flag  or  one  of the forms of the '(Z)' flag is
1466              present, the word is split as if it were a shell  command  line,
1467              so that quotation marks and other metacharacters are used to de‐
1468              cide what constitutes a word.  Note this form  of  splitting  is
1469              entirely  distinct  from that described by rule 11.: it does not
1470              use $IFS, and does not cause forced joining.
1471
1472       18. Uniqueness
1473              If the result is an array and the `(u)' flag was present, dupli‐
1474              cate elements are removed from the array.
1475
1476       19. Ordering
1477              If  the  result  is still an array and one of the `(o)' or `(O)'
1478              flags was present, the array is reordered.
1479
1480       20. RC_EXPAND_PARAM
1481              At this point the decision is made whether any  resulting  array
1482              elements  are to be combined element by element with surrounding
1483              text, as given by either the RC_EXPAND_PARAM option or  the  `^'
1484              flag.
1485
1486       21. Re-evaluation
1487              Any  `(e)' flag is applied to the value, forcing it to be re-ex‐
1488              amined for new parameter substitutions, but also for command and
1489              arithmetic substitutions.
1490
1491       22. Padding
1492              Any padding of the value by the `(l.fill.)' or `(r.fill.)' flags
1493              is applied.
1494
1495       23. Semantic joining
1496              In contexts where expansion semantics requires a single word  to
1497              result,  all  words are rejoined with the first character of IFS
1498              between.  So in `${(P)${(f)lines}}' the  value  of  ${lines}  is
1499              split  at  newlines,  but  then  must be joined again before the
1500              `(P)' flag can be applied.
1501
1502              If a single word is not required, this rule is skipped.
1503
1504       24. Empty argument removal
1505              If the substitution does not appear in double  quotes,  any  re‐
1506              sulting  zero-length  argument, whether from a scalar or an ele‐
1507              ment of an array, is elided from the list of arguments  inserted
1508              into the command line.
1509
1510              Strictly speaking, the removal happens later as the same happens
1511              with other forms of substitution; the point to note here is sim‐
1512              ply that it occurs after any of the above parameter operations.
1513
1514       25. Nested parameter name replacement
1515              If  the  `(P)'  flag is present and rule 4. has not applied, the
1516              value so far is treated as a parameter name (which may include a
1517              subscript expression) and replaced with the corresponding value,
1518              with internal flags (rule 2.) applied to the new value.
1519
1520   Examples
1521       The flag f is useful to split  a  double-quoted  substitution  line  by
1522       line.   For  example, ${(f)"$(<file)"} substitutes the contents of file
1523       divided so that each line is an element of the resulting  array.   Com‐
1524       pare  this with the effect of $(<file) alone, which divides the file up
1525       by words, or the same inside double quotes, which makes the entire con‐
1526       tent of the file a single string.
1527
1528       The  following  illustrates  the rules for nested parameter expansions.
1529       Suppose that $foo contains the array (bar baz):
1530
1531       "${(@)${foo}[1]}"
1532              This produces the  result  b.   First,  the  inner  substitution
1533              "${foo}",  which  has  no array (@) flag, produces a single word
1534              result "bar baz".  The outer substitution "${(@)...[1]}" detects
1535              that this is a scalar, so that (despite the `(@)' flag) the sub‐
1536              script picks the first character.
1537
1538       "${${(@)foo}[1]}"
1539              This produces the result `bar'.  In this case, the inner substi‐
1540              tution  "${(@)foo}"  produces  the array `(bar baz)'.  The outer
1541              substitution "${...[1]}" detects that this is an array and picks
1542              the first word.  This is similar to the simple case "${foo[1]}".
1543
1544       As an example of the rules for word splitting and joining, suppose $foo
1545       contains the array `(ax1 bx1)'.  Then
1546
1547       ${(s/x/)foo}
1548              produces the words `a', `1 b' and `1'.
1549
1550       ${(j/x/s/x/)foo}
1551              produces `a', `1', `b' and `1'.
1552
1553       ${(s/x/)foo%%1*}
1554              produces `a' and ` b' (note the extra space).   As  substitution
1555              occurs  before either joining or splitting, the operation  first
1556              generates the modified array (ax bx), which is  joined  to  give
1557              "ax  bx",  and  then  split to give `a', ` b' and `'.  The final
1558              empty string will then be elided, as it is not in double quotes.
1559

COMMAND SUBSTITUTION

1561       A command enclosed in parentheses  preceded  by  a  dollar  sign,  like
1562       `$(...)',  or quoted with grave accents, like ``...`', is replaced with
1563       its standard output, with any trailing newlines deleted.  If  the  sub‐
1564       stitution  is  not enclosed in double quotes, the output is broken into
1565       words using the IFS parameter.
1566
1567       The substitution `$(cat foo)' may be replaced by the faster  `$(<foo)'.
1568       In  this case foo undergoes single word shell expansions (parameter ex‐
1569       pansion, command substitution and arithmetic expansion), but not  file‐
1570       name generation.
1571
1572       If  the  option  GLOB_SUBST  is set, the result of any unquoted command
1573       substitution, including the special form just  mentioned,  is  eligible
1574       for filename generation.
1575

ARITHMETIC EXPANSION

1577       A  string  of  the  form `$[exp]' or `$((exp))' is substituted with the
1578       value of the arithmetic expression exp.  exp is subjected to  parameter
1579       expansion,  command  substitution and arithmetic expansion before it is
1580       evaluated.  See the section `Arithmetic Evaluation'.
1581

BRACE EXPANSION

1583       A string of the form `foo{xx,yy,zz}bar' is expanded to  the  individual
1584       words  `fooxxbar',  `fooyybar'  and `foozzbar'.  Left-to-right order is
1585       preserved.  This construct may be nested.  Commas may be quoted in  or‐
1586       der to include them literally in a word.
1587
1588       An  expression of the form `{n1..n2}', where n1 and n2 are integers, is
1589       expanded to every number between n1 and n2 inclusive.  If either number
1590       begins with a zero, all the resulting numbers will be padded with lead‐
1591       ing zeroes to that minimum width, but for negative numbers the -  char‐
1592       acter  is also included in the width.  If the numbers are in decreasing
1593       order the resulting sequence will also be in decreasing order.
1594
1595       An expression of the form `{n1..n2..n3}', where n1, n2, and n3 are  in‐
1596       tegers,  is expanded as above, but only every n3th number starting from
1597       n1 is output.  If n3 is negative the numbers are output in reverse  or‐
1598       der,  this  is slightly different from simply swapping n1 and n2 in the
1599       case that the step n3 doesn't evenly divide the  range.   Zero  padding
1600       can  be  specified  in  any  of the three numbers, specifying it in the
1601       third can be useful to pad for example `{-99..100..01}'  which  is  not
1602       possible  to  specify by putting a 0 on either of the first two numbers
1603       (i.e. pad to two characters).
1604
1605       An expression of the form `{c1..c2}', where c1 and c2 are single  char‐
1606       acters  (which may be multibyte characters), is expanded to every char‐
1607       acter in the range from c1 to c2 in whatever character sequence is used
1608       internally.  For characters with code points below 128 this is US ASCII
1609       (this is the only case most users will need).  If any intervening char‐
1610       acter  is  not  printable,  appropriate  quotation is used to render it
1611       printable.  If the character sequence is reversed, the output is in re‐
1612       verse order, e.g. `{d..a}' is substituted as `d c b a'.
1613
1614       If  a  brace expression matches none of the above forms, it is left un‐
1615       changed, unless the option BRACE_CCL (an abbreviation for `brace  char‐
1616       acter  class')  is  set.  In that case, it is expanded to a list of the
1617       individual characters between the braces sorted into the order  of  the
1618       characters  in  the  ASCII  character set (multibyte characters are not
1619       currently handled).  The syntax is similar to  a  [...]  expression  in
1620       filename  generation:  `-'  is  treated  specially to denote a range of
1621       characters, but `^' or `!' as the first character is treated  normally.
1622       For  example, `{abcdef0-9}' expands to 16 words 0 1 2 3 4 5 6 7 8 9 a b
1623       c d e f.
1624
1625       Note that brace expansion is not part  of  filename  generation  (glob‐
1626       bing);  an  expression  such  as */{foo,bar} is split into two separate
1627       words */foo and */bar before filename generation takes place.  In  par‐
1628       ticular,  note that this is liable to produce a `no match' error if ei‐
1629       ther of the two expressions does not match; this is  to  be  contrasted
1630       with  */(foo|bar),  which  is treated as a single pattern but otherwise
1631       has similar effects.
1632
1633       To combine brace expansion with array expansion, see the ${^spec}  form
1634       described in the section `Parameter Expansion' above.
1635

FILENAME EXPANSION

1637       Each  word  is checked to see if it begins with an unquoted `~'.  If it
1638       does, then the word up to a `/', or the end of the word if there is  no
1639       `/',  is checked to see if it can be substituted in one of the ways de‐
1640       scribed here.  If so, then the `~' and the checked portion are replaced
1641       with the appropriate substitute value.
1642
1643       A `~' by itself is replaced by the value of $HOME.  A `~' followed by a
1644       `+' or a `-' is replaced by current or previous working directory,  re‐
1645       spectively.
1646
1647       A  `~'  followed by a number is replaced by the directory at that posi‐
1648       tion in the directory stack.  `~0' is equivalent to `~+', and  `~1'  is
1649       the top of the stack.  `~+' followed by a number is replaced by the di‐
1650       rectory at that position in the directory stack.  `~+0'  is  equivalent
1651       to  `~+', and `~+1' is the top of the stack.  `~-' followed by a number
1652       is replaced by the directory that many positions from the bottom of the
1653       stack.   `~-0'  is the bottom of the stack.  The PUSHD_MINUS option ex‐
1654       changes the effects of `~+' and `~-' where they are followed by a  num‐
1655       ber.
1656
1657   Dynamic named directories
1658       If  the  function  zsh_directory_name  exists,  or  the  shell variable
1659       zsh_directory_name_functions exists and contains an array  of  function
1660       names,  then the functions are used to implement dynamic directory nam‐
1661       ing.  The functions are tried in order until one returns  status  zero,
1662       so it is important that functions test whether they can handle the case
1663       in question and return an appropriate status.
1664
1665       A `~' followed by a  string  namstr  in  unquoted  square  brackets  is
1666       treated specially as a dynamic directory name.  Note that the first un‐
1667       quoted closing square bracket  always  terminates  namstr.   The  shell
1668       function  is  passed two arguments: the string n (for name) and namstr.
1669       It should either set the array reply to a single element which  is  the
1670       directory  corresponding  to the name and return status zero (executing
1671       an assignment as the last  statement  is  usually  sufficient),  or  it
1672       should return status non-zero.  In the former case the element of reply
1673       is used as the directory; in the latter case the substitution is deemed
1674       to  have  failed.  If all functions fail and the option NOMATCH is set,
1675       an error results.
1676
1677       The functions defined as above are also used to see if a directory  can
1678       be turned into a name, for example when printing the directory stack or
1679       when expanding %~ in prompts.  In this case each function is passed two
1680       arguments:  the  string d (for directory) and the candidate for dynamic
1681       naming.  The function should either return non-zero status, if the  di‐
1682       rectory cannot be named by the function, or it should set the array re‐
1683       ply to consist of two elements: the first is the dynamic name  for  the
1684       directory (as would appear within `~[...]'), and the second is the pre‐
1685       fix length of the directory to be replaced.  For example, if the  trial
1686       directory  is  /home/myname/src/zsh  and the dynamic name for /home/my‐
1687       name/src (which has 16 characters) is s, then the function sets
1688
1689              reply=(s 16)
1690
1691       The directory name so returned is compared with possible  static  names
1692       for  parts of the directory path, as described below; it is used if the
1693       prefix length matched (16 in the example) is longer than  that  matched
1694       by any static name.
1695
1696       It  is not a requirement that a function implements both n and d calls;
1697       for example, it might be appropriate for certain dynamic forms  of  ex‐
1698       pansion  not to be contracted to names.  In that case any call with the
1699       first argument d should cause a non-zero status to be returned.
1700
1701       The completion system calls `zsh_directory_name c' followed by  equiva‐
1702       lent calls to elements of the array zsh_directory_name_functions, if it
1703       exists, in order to complete dynamic names for directories.   The  code
1704       for this should be as for any other completion function as described in
1705       zshcompsys(1).
1706
1707       As a working example, here is a function that expands any dynamic names
1708       beginning  with  the string p: to directories below /home/pws/perforce.
1709       In this simple case a static name for the directory would  be  just  as
1710       effective.
1711
1712              zsh_directory_name() {
1713                emulate -L zsh
1714                setopt extendedglob
1715                local -a match mbegin mend
1716                if [[ $1 = d ]]; then
1717                  # turn the directory into a name
1718                  if [[ $2 = (#b)(/home/pws/perforce/)([^/]##)* ]]; then
1719                    typeset -ga reply
1720                    reply=(p:$match[2] $(( ${#match[1]} + ${#match[2]} )) )
1721                  else
1722                    return 1
1723                  fi
1724                elif [[ $1 = n ]]; then
1725                  # turn the name into a directory
1726                  [[ $2 != (#b)p:(?*) ]] && return 1
1727                  typeset -ga reply
1728                  reply=(/home/pws/perforce/$match[1])
1729                elif [[ $1 = c ]]; then
1730                  # complete names
1731                  local expl
1732                  local -a dirs
1733                  dirs=(/home/pws/perforce/*(/:t))
1734                  dirs=(p:${^dirs})
1735                  _wanted dynamic-dirs expl 'dynamic directory' compadd -S\] -a dirs
1736                  return
1737                else
1738                  return 1
1739                fi
1740                return 0
1741              }
1742
1743   Static named directories
1744       A `~' followed by anything not already covered consisting of any number
1745       of alphanumeric characters or underscore (`_'), hyphen  (`-'),  or  dot
1746       (`.')  is  looked up as a named directory, and replaced by the value of
1747       that named directory if found.  Named directories  are  typically  home
1748       directories  for  users on the system.  They may also be defined if the
1749       text after the `~' is the name of a string shell parameter whose  value
1750       begins with a `/'.  Note that trailing slashes will be removed from the
1751       path to the directory (though the original parameter is not modified).
1752
1753       It is also possible to define directory names using the  -d  option  to
1754       the hash builtin.
1755
1756       When the shell prints a path (e.g. when expanding %~ in prompts or when
1757       printing the directory stack), the path is checked to see if it  has  a
1758       named  directory  as its prefix.  If so, then the prefix portion is re‐
1759       placed with a `~' followed by the name of the directory.   The  shorter
1760       of  the two ways of referring to the directory is used, i.e. either the
1761       directory name or the full path; the name is used if they are the  same
1762       length.   The parameters $PWD and $OLDPWD are never abbreviated in this
1763       fashion.
1764
1765   `=' expansion
1766       If a word begins with an unquoted `=' and the EQUALS option is set, the
1767       remainder  of the word is taken as the name of a command.  If a command
1768       exists by that name, the word is replaced by the full pathname  of  the
1769       command.
1770
1771   Notes
1772       Filename  expansion  is performed on the right hand side of a parameter
1773       assignment, including those appearing after  commands  of  the  typeset
1774       family.   In  this  case,  the  right  hand  side  will be treated as a
1775       colon-separated list in the manner of the PATH parameter, so that a `~'
1776       or  an  `=' following a `:' is eligible for expansion.  All such behav‐
1777       iour can be disabled by quoting the `~', the `=', or the whole  expres‐
1778       sion (but not simply the colon); the EQUALS option is also respected.
1779
1780       If  the option MAGIC_EQUAL_SUBST is set, any unquoted shell argument in
1781       the form `identifier=expression' becomes eligible for file expansion as
1782       described  in  the  previous paragraph.  Quoting the first `=' also in‐
1783       hibits this.
1784

FILENAME GENERATION

1786       If a word contains an unquoted instance of one of the  characters  `*',
1787       `(',  `|',  `<',  `[', or `?', it is regarded as a pattern for filename
1788       generation, unless the GLOB option is unset.  If the EXTENDED_GLOB  op‐
1789       tion  is  set, the `^' and `#' characters also denote a pattern; other‐
1790       wise they are not treated specially by the shell.
1791
1792       The word is replaced with a list of sorted  filenames  that  match  the
1793       pattern.   If  no  matching  pattern is found, the shell gives an error
1794       message, unless the NULL_GLOB option is set, in which case the word  is
1795       deleted;  or unless the NOMATCH option is unset, in which case the word
1796       is left unchanged.
1797
1798       In filename generation, the character `/' must be  matched  explicitly;
1799       also, a `.' must be matched explicitly at the beginning of a pattern or
1800       after a `/', unless the GLOB_DOTS option is set.  No  filename  genera‐
1801       tion pattern matches the files `.' or `..'.  In other instances of pat‐
1802       tern matching, the `/' and `.' are not treated specially.
1803
1804   Glob Operators
1805       *      Matches any string, including the null string.
1806
1807       ?      Matches any character.
1808
1809       [...]  Matches any of the enclosed characters.   Ranges  of  characters
1810              can  be  specified by separating two characters by a `-'.  A `-'
1811              or `]' may be matched by including it as the first character  in
1812              the  list.   There are also several named classes of characters,
1813              in the form `[:name:]' with the following meanings.   The  first
1814              set  use the macros provided by the operating system to test for
1815              the given character combinations,  including  any  modifications
1816              due to local language settings, see ctype(3):
1817
1818              [:alnum:]
1819                     The character is alphanumeric
1820
1821              [:alpha:]
1822                     The character is alphabetic
1823
1824              [:ascii:]
1825                     The  character  is 7-bit, i.e. is a single-byte character
1826                     without the top bit set.
1827
1828              [:blank:]
1829                     The character is a blank character
1830
1831              [:cntrl:]
1832                     The character is a control character
1833
1834              [:digit:]
1835                     The character is a decimal digit
1836
1837              [:graph:]
1838                     The character is a printable character other than  white‐
1839                     space
1840
1841              [:lower:]
1842                     The character is a lowercase letter
1843
1844              [:print:]
1845                     The character is printable
1846
1847              [:punct:]
1848                     The  character  is printable but neither alphanumeric nor
1849                     whitespace
1850
1851              [:space:]
1852                     The character is whitespace
1853
1854              [:upper:]
1855                     The character is an uppercase letter
1856
1857              [:xdigit:]
1858                     The character is a hexadecimal digit
1859
1860              Another set of named classes is handled internally by the  shell
1861              and is not sensitive to the locale:
1862
1863              [:IDENT:]
1864                     The  character is allowed to form part of a shell identi‐
1865                     fier, such as a parameter name; this  test  respects  the
1866                     POSIX_IDENTIFIERS option
1867
1868              [:IFS:]
1869                     The  character  is used as an input field separator, i.e.
1870                     is contained in the IFS parameter
1871
1872              [:IFSSPACE:]
1873                     The character is an IFS white space  character;  see  the
1874                     documentation for IFS in the zshparam(1) manual page.
1875
1876              [:INCOMPLETE:]
1877                     Matches  a byte that starts an incomplete multibyte char‐
1878                     acter.  Note that there may be a sequence  of  more  than
1879                     one bytes that taken together form the prefix of a multi‐
1880                     byte character.  To test  for  a  potentially  incomplete
1881                     byte sequence, use the pattern `[[:INCOMPLETE:]]*'.  This
1882                     will never match a sequence starting with a valid  multi‐
1883                     byte character.
1884
1885              [:INVALID:]
1886                     Matches  a  byte  that  does  not start a valid multibyte
1887                     character.  Note this may be a continuation  byte  of  an
1888                     incomplete multibyte character as any part of a multibyte
1889                     string consisting of  invalid  and  incomplete  multibyte
1890                     characters is treated as single bytes.
1891
1892              [:WORD:]
1893                     The  character is treated as part of a word; this test is
1894                     sensitive to the value of the WORDCHARS parameter
1895
1896              Note that the square brackets are additional to those  enclosing
1897              the  whole  set  of characters, so to test for a single alphanu‐
1898              meric character you need `[[:alnum:]]'.   Named  character  sets
1899              can be used alongside other types, e.g. `[[:alpha:]0-9]'.
1900
1901       [^...]
1902       [!...] Like [...], except that it matches any character which is not in
1903              the given set.
1904
1905       <[x]-[y]>
1906              Matches any number in the range x to y,  inclusive.   Either  of
1907              the  numbers  may be omitted to make the range open-ended; hence
1908              `<->' matches any number.  To match individual digits, the [...]
1909              form is more efficient.
1910
1911              Be  careful  when  using other wildcards adjacent to patterns of
1912              this form; for example, <0-9>* will actually  match  any  number
1913              whatsoever  at  the  start of the string, since the `<0-9>' will
1914              match the first digit, and the `*' will match any others.   This
1915              is  a  trap  for the unwary, but is in fact an inevitable conse‐
1916              quence of the rule that the longest possible match  always  suc‐
1917              ceeds.  Expressions such as `<0-9>[^[:digit:]]*' can be used in‐
1918              stead.
1919
1920       (...)  Matches the enclosed pattern.  This is used  for  grouping.   If
1921              the KSH_GLOB option is set, then a `@', `*', `+', `?' or `!' im‐
1922              mediately preceding the `(' is treated  specially,  as  detailed
1923              below.  The  option SH_GLOB prevents bare parentheses from being
1924              used in this way, though the KSH_GLOB option is still available.
1925
1926              Note that grouping cannot extend over multiple  directories:  it
1927              is  an error to have a `/' within a group (this only applies for
1928              patterns used in filename generation).  There is one  exception:
1929              a group of the form (pat/)# appearing as a complete path segment
1930              can match a sequence of directories.  For example, foo/(a*/)#bar
1931              matches foo/bar, foo/any/bar, foo/any/anyother/bar, and so on.
1932
1933       x|y    Matches  either x or y.  This operator has lower precedence than
1934              any other.  The `|' character must  be  within  parentheses,  to
1935              avoid  interpretation as a pipeline.  The alternatives are tried
1936              in order from left to right.
1937
1938       ^x     (Requires EXTENDED_GLOB to be set.)  Matches anything except the
1939              pattern x.  This has a higher precedence than `/', so `^foo/bar'
1940              will search directories in `.' except `./foo' for a  file  named
1941              `bar'.
1942
1943       x~y    (Requires EXTENDED_GLOB to be set.)  Match anything that matches
1944              the pattern x but does not match y.  This has  lower  precedence
1945              than  any  operator except `|', so `*/*~foo/bar' will search for
1946              all files in all directories in `.'  and then exclude  `foo/bar'
1947              if there was such a match.  Multiple patterns can be excluded by
1948              `foo~bar~baz'.  In the exclusion pattern (y), `/'  and  `.'  are
1949              not treated specially the way they usually are in globbing.
1950
1951       x#     (Requires EXTENDED_GLOB to be set.)  Matches zero or more occur‐
1952              rences of the pattern x.  This  operator  has  high  precedence;
1953              `12#'  is  equivalent to `1(2#)', rather than `(12)#'.  It is an
1954              error for an unquoted `#' to follow something  which  cannot  be
1955              repeated;  this includes an empty string, a pattern already fol‐
1956              lowed by `##', or parentheses when part of  a  KSH_GLOB  pattern
1957              (for  example,  `!(foo)#'  is  invalid  and  must be replaced by
1958              `*(!(foo))').
1959
1960       x##    (Requires EXTENDED_GLOB to be set.)  Matches one or more  occur‐
1961              rences  of  the  pattern  x.  This operator has high precedence;
1962              `12##' is equivalent to `1(2##)', rather than `(12)##'.  No more
1963              than  two  active `#' characters may appear together.  (Note the
1964              potential clash with glob qualifiers in the form `1(2##)'  which
1965              should therefore be avoided.)
1966
1967   ksh-like Glob Operators
1968       If  the KSH_GLOB option is set, the effects of parentheses can be modi‐
1969       fied by a preceding `@', `*', `+', `?' or `!'.  This character need not
1970       be unquoted to have special effects, but the `(' must be.
1971
1972       @(...) Match the pattern in the parentheses.  (Like `(...)'.)
1973
1974       *(...) Match  any  number  of occurrences.  (Like `(...)#', except that
1975              recursive directory searching is not supported.)
1976
1977       +(...) Match at least one occurrence.  (Like `(...)##', except that re‐
1978              cursive directory searching is not supported.)
1979
1980       ?(...) Match zero or one occurrence.  (Like `(|...)'.)
1981
1982       !(...) Match   anything  but  the  expression  in  parentheses.   (Like
1983              `(^(...))'.)
1984
1985   Precedence
1986       The precedence of the operators given above is (highest) `^', `/', `~',
1987       `|'  (lowest);  the remaining operators are simply treated from left to
1988       right as part of a string, with `#' and `##' applying to  the  shortest
1989       possible  preceding unit (i.e. a character, `?', `[...]', `<...>', or a
1990       parenthesised expression).  As mentioned above, a `/' used as a  direc‐
1991       tory  separator  may not appear inside parentheses, while a `|' must do
1992       so; in patterns used in other contexts than  filename  generation  (for
1993       example,  in  case statements and tests within `[[...]]'), a `/' is not
1994       special; and `/' is also not special  after  a  `~'  appearing  outside
1995       parentheses in a filename pattern.
1996
1997   Globbing Flags
1998       There  are various flags which affect any text to their right up to the
1999       end of the enclosing group or to the end of the pattern;  they  require
2000       the  EXTENDED_GLOB  option. All take the form (#X) where X may have one
2001       of the following forms:
2002
2003       i      Case insensitive:  upper or lower case characters in the pattern
2004              match upper or lower case characters.
2005
2006       l      Lower  case  characters in the pattern match upper or lower case
2007              characters; upper case characters  in  the  pattern  still  only
2008              match upper case characters.
2009
2010       I      Case  sensitive:  locally negates the effect of i or l from that
2011              point on.
2012
2013       b      Activate backreferences for parenthesised groups in the pattern;
2014              this  does not work in filename generation.  When a pattern with
2015              a set of active parentheses is matched, the strings  matched  by
2016              the  groups  are  stored in the array $match, the indices of the
2017              beginning of the matched parentheses in the array  $mbegin,  and
2018              the  indices  of the end in the array $mend, with the first ele‐
2019              ment of each array  corresponding  to  the  first  parenthesised
2020              group, and so on.  These arrays are not otherwise special to the
2021              shell.  The indices use the same convention  as  does  parameter
2022              substitution,  so that elements of $mend and $mbegin may be used
2023              in subscripts; the KSH_ARRAYS  option  is  respected.   Sets  of
2024              globbing flags are not considered parenthesised groups; only the
2025              first nine active parentheses can be referenced.
2026
2027              For example,
2028
2029                     foo="a_string_with_a_message"
2030                     if [[ $foo = (a|an)_(#b)(*) ]]; then
2031                       print ${foo[$mbegin[1],$mend[1]]}
2032                     fi
2033
2034              prints `string_with_a_message'.  Note  that  the  first  set  of
2035              parentheses  is before the (#b) and does not create a backrefer‐
2036              ence.
2037
2038              Backreferences work with all forms  of  pattern  matching  other
2039              than  filename generation, but note that when performing matches
2040              on an entire array, such as ${array#pattern}, or a  global  sub‐
2041              stitution,  such  as  ${param//pat/repl},  only the data for the
2042              last match remains available.  In the case  of  global  replace‐
2043              ments  this may still be useful.  See the example for the m flag
2044              below.
2045
2046              The numbering of backreferences strictly follows  the  order  of
2047              the  opening  parentheses  from  left  to  right  in the pattern
2048              string, although sets of parentheses may be nested.   There  are
2049              special rules for parentheses followed by `#' or `##'.  Only the
2050              last match of the parenthesis is remembered: for example, in `[[
2051              abab  =  (#b)([ab])#  ]]',  only  the  final  `b'  is  stored in
2052              match[1].  Thus extra parentheses may be necessary to match  the
2053              complete  segment:  for  example,  use `X((ab|cd)#)Y' to match a
2054              whole string of either `ab' or `cd' between `X' and  `Y',  using
2055              the value of $match[1] rather than $match[2].
2056
2057              If the match fails none of the parameters is altered, so in some
2058              cases it may be necessary to  initialise  them  beforehand.   If
2059              some  of  the  backreferences  fail to match -- which happens if
2060              they are in an alternate branch which fails to match, or if they
2061              are  followed  by  #  and matched zero times -- then the matched
2062              string is set to the empty string, and the start and end indices
2063              are set to -1.
2064
2065              Pattern  matching  with  backreferences  is slightly slower than
2066              without.
2067
2068       B      Deactivate backreferences, negating the effect  of  the  b  flag
2069              from that point on.
2070
2071       cN,M   The flag (#cN,M) can be used anywhere that the # or ## operators
2072              can be used except in the expressions `(*/)#'  and  `(*/)##'  in
2073              filename generation, where `/' has special meaning; it cannot be
2074              combined with other globbing flags and a bad pattern  error  oc‐
2075              curs  if it is misplaced.  It is equivalent to the form {N,M} in
2076              regular expressions.  The previous character  or  group  is  re‐
2077              quired  to  match  between  N  and M times, inclusive.  The form
2078              (#cN) requires exactly N matches; (#c,M) is equivalent to speci‐
2079              fying N as 0; (#cN,) specifies that there is no maximum limit on
2080              the number of matches.
2081
2082       m      Set references to the match data for the entire string  matched;
2083              this is similar to backreferencing and does not work in filename
2084              generation.  The flag must be in effect at the end of  the  pat‐
2085              tern, i.e. not local to a group. The parameters $MATCH,  $MBEGIN
2086              and $MEND will be set to the string matched and to  the  indices
2087              of  the  beginning and end of the string, respectively.  This is
2088              most useful in parameter substitutions, as otherwise the  string
2089              matched is obvious.
2090
2091              For example,
2092
2093                     arr=(veldt jynx grimps waqf zho buck)
2094                     print ${arr//(#m)[aeiou]/${(U)MATCH}}
2095
2096              forces  all the matches (i.e. all vowels) into uppercase, print‐
2097              ing `vEldt jynx grImps wAqf zhO bUck'.
2098
2099              Unlike backreferences, there is no speed penalty for using match
2100              references,  other than the extra substitutions required for the
2101              replacement strings in cases such as the example shown.
2102
2103       M      Deactivate the m flag, hence no references to match data will be
2104              created.
2105
2106       anum   Approximate  matching:  num  errors  are  allowed  in the string
2107              matched by the pattern.  The rules for this are described in the
2108              next subsection.
2109
2110       s, e   Unlike the other flags, these have only a local effect, and each
2111              must appear on its own:  `(#s)' and `(#e)' are  the  only  valid
2112              forms.   The  `(#s)' flag succeeds only at the start of the test
2113              string, and the `(#e)' flag succeeds only at the end of the test
2114              string;  they  correspond to `^' and `$' in standard regular ex‐
2115              pressions.  They are useful for matching path segments  in  pat‐
2116              terns  other  than those in filename generation (where path seg‐
2117              ments  are  in  any  case  treated  separately).   For  example,
2118              `*((#s)|/)test((#e)|/)*' matches a path segment `test' in any of
2119              the  following  strings:   test,   test/at/start,   at/end/test,
2120              in/test/middle.
2121
2122              Another  use  is  in  parameter substitution; for example `${ar‐
2123              ray/(#s)A*Z(#e)}' will remove only elements of  an  array  which
2124              match  the complete pattern `A*Z'.  There are other ways of per‐
2125              forming many operations of this type, however the combination of
2126              the  substitution  operations  `/'  and `//' with the `(#s)' and
2127              `(#e)' flags provides a single simple and memorable method.
2128
2129              Note that assertions of the form `(^(#s))' also work, i.e. match
2130              anywhere  except at the start of the string, although this actu‐
2131              ally means `anything except a zero-length portion at  the  start
2132              of  the  string';  you  need  to  use  `(""~(#s))'  to  match  a
2133              zero-length portion of the string not at the start.
2134
2135       q      A `q' and everything up to the closing parenthesis of the  glob‐
2136              bing  flags  are  ignored by the pattern matching code.  This is
2137              intended to support the use of glob qualifiers, see below.   The
2138              result is that the pattern `(#b)(*).c(#q.)' can be used both for
2139              globbing and for matching against a string.  In the former case,
2140              the  `(#q.)'  will be treated as a glob qualifier and the `(#b)'
2141              will not be useful, while in the latter case the `(#b)' is  use‐
2142              ful  for  backreferences  and the `(#q.)' will be ignored.  Note
2143              that colon modifiers in the glob qualifiers are also not applied
2144              in ordinary pattern matching.
2145
2146       u      Respect the current locale in determining the presence of multi‐
2147              byte characters in a pattern, provided the  shell  was  compiled
2148              with  MULTIBYTE_SUPPORT.   This  overrides the MULTIBYTE option;
2149              the default behaviour is taken  from  the  option.   Compare  U.
2150              (Mnemonic:  typically  multibyte  characters are from Unicode in
2151              the UTF-8 encoding, although any extension of ASCII supported by
2152              the system library may be used.)
2153
2154       U      All characters are considered to be a single byte long.  The op‐
2155              posite of u.  This overrides the MULTIBYTE option.
2156
2157       For example, the test string  fooxx  can  be  matched  by  the  pattern
2158       (#i)FOOXX,  but  not  by  (#l)FOOXX, (#i)FOO(#I)XX or ((#i)FOOX)X.  The
2159       string (#ia2)readme specifies case-insensitive matching of readme  with
2160       up to two errors.
2161
2162       When  using the ksh syntax for grouping both KSH_GLOB and EXTENDED_GLOB
2163       must be set and the left parenthesis should be  preceded  by  @.   Note
2164       also that the flags do not affect letters inside [...] groups, in other
2165       words (#i)[a-z] still matches only lowercase  letters.   Finally,  note
2166       that when examining whole paths case-insensitively every directory must
2167       be searched for all files which match, so that a pattern  of  the  form
2168       (#i)/foo/bar/... is potentially slow.
2169
2170   Approximate Matching
2171       When  matching  approximately,  the  shell  keeps a count of the errors
2172       found, which cannot exceed the number specified in the  (#anum)  flags.
2173       Four types of error are recognised:
2174
2175       1.     Different characters, as in fooxbar and fooybar.
2176
2177       2.     Transposition of characters, as in banana and abnana.
2178
2179       3.     A  character  missing  in the target string, as with the pattern
2180              road and target string rod.
2181
2182       4.     An extra character appearing in the target string, as with stove
2183              and strove.
2184
2185       Thus,  the pattern (#a3)abcd matches dcba, with the errors occurring by
2186       using the first rule twice and the second once, grouping the string  as
2187       [d][cb][a] and [a][bc][d].
2188
2189       Non-literal  parts of the pattern must match exactly, including charac‐
2190       ters in character ranges: hence (#a1)???   matches  strings  of  length
2191       four,  by  applying  rule  4  to  an empty part of the pattern, but not
2192       strings of length two, since all the ? must  match.   Other  characters
2193       which  must  match  exactly  are  initial dots in filenames (unless the
2194       GLOB_DOTS option is set), and all slashes in filenames, so that a/bc is
2195       two errors from ab/c (the slash cannot be transposed with another char‐
2196       acter).  Similarly, errors are counted  separately  for  non-contiguous
2197       strings in the pattern, so that (ab|cd)ef is two errors from aebf.
2198
2199       When  using  exclusion  via  the  ~  operator,  approximate matching is
2200       treated entirely separately for the excluded part and must be activated
2201       separately.  Thus, (#a1)README~READ_ME matches READ.ME but not READ_ME,
2202       as the trailing READ_ME is  matched  without  approximation.   However,
2203       (#a1)README~(#a1)READ_ME does not match any pattern of the form READ?ME
2204       as all such forms are now excluded.
2205
2206       Apart from exclusions, there is only one overall error count;  however,
2207       the  maximum errors allowed may be altered locally, and this can be de‐
2208       limited by grouping.  For example, (#a1)cat((#a0)dog)fox allows one er‐
2209       ror  in  total, which may not occur in the dog section, and the pattern
2210       (#a1)cat(#a0)dog(#a1)fox is equivalent.  Note that the point  at  which
2211       an  error is first found is the crucial one for establishing whether to
2212       use  approximation;  for  example,  (#a1)abc(#a0)xyz  will  not   match
2213       abcdxyz,  because  the  error occurs at the `x', where approximation is
2214       turned off.
2215
2216       Entire  path  segments  may   be   matched   approximately,   so   that
2217       `(#a1)/foo/d/is/available/at/the/bar' allows one error in any path seg‐
2218       ment.  This is much less efficient than  without  the  (#a1),  however,
2219       since  every  directory  in the path must be scanned for a possible ap‐
2220       proximate match.  It is best to place the (#a1) after any path segments
2221       which are known to be correct.
2222
2223   Recursive Globbing
2224       A pathname component of the form `(foo/)#' matches a path consisting of
2225       zero or more directories matching the pattern foo.
2226
2227       As a shorthand, `**/' is equivalent to `(*/)#'; note that  this  there‐
2228       fore  matches files in the current directory as well as subdirectories.
2229       Thus:
2230
2231              ls -ld -- (*/)#bar
2232
2233       or
2234
2235              ls -ld -- **/bar
2236
2237       does a recursive directory search for files  named  `bar'  (potentially
2238       including the file `bar' in the current directory).  This form does not
2239       follow symbolic links; the alternative form `***/' does, but is  other‐
2240       wise  identical.   Neither of these can be combined with other forms of
2241       globbing within the same path segment; in that case, the `*'  operators
2242       revert to their usual effect.
2243
2244       Even  shorter  forms  are  available when the option GLOB_STAR_SHORT is
2245       set.  In that case if no / immediately follows a **  or  ***  they  are
2246       treated as if both a / plus a further * are present.  Hence:
2247
2248              setopt GLOBSTARSHORT
2249              ls -ld -- **.c
2250
2251       is equivalent to
2252
2253              ls -ld -- **/*.c
2254
2255   Glob Qualifiers
2256       Patterns  used  for filename generation may end in a list of qualifiers
2257       enclosed in parentheses.  The qualifiers specify which  filenames  that
2258       otherwise  match  the  given  pattern  will be inserted in the argument
2259       list.
2260
2261       If the option BARE_GLOB_QUAL is set, then a trailing set of parentheses
2262       containing  no `|' or `(' characters (or `~' if it is special) is taken
2263       as a set of glob qualifiers.  A glob subexpression that would  normally
2264       be  taken  as  glob qualifiers, for example `(^x)', can be forced to be
2265       treated as part of the glob pattern by  doubling  the  parentheses,  in
2266       this case producing `((^x))'.
2267
2268       If  the option EXTENDED_GLOB is set, a different syntax for glob quali‐
2269       fiers is available, namely `(#qx)' where x is  any  of  the  same  glob
2270       qualifiers  used in the other format.  The qualifiers must still appear
2271       at the end of the pattern.  However, with  this  syntax  multiple  glob
2272       qualifiers  may be chained together.  They are treated as a logical AND
2273       of the individual sets of flags.  Also, as the syntax  is  unambiguous,
2274       the  expression  will  be  treated  as glob qualifiers just as long any
2275       parentheses contained within it are balanced; appearance of `|', `(' or
2276       `~'  does  not  negate the effect.  Note that qualifiers will be recog‐
2277       nised in this form even if a bare glob qualifier exists at the  end  of
2278       the  pattern, for example `*(#q*)(.)' will recognise executable regular
2279       files if both options are set; however, mixed syntax should probably be
2280       avoided for the sake of clarity.  Note that within conditions using the
2281       `[[' form the presence of a parenthesised expression (#q...) at the end
2282       of a string indicates that globbing should be performed; the expression
2283       may include glob qualifiers, but it is also valid if it is simply (#q).
2284       This  does  not apply to the right hand side of pattern match operators
2285       as the syntax already has special significance.
2286
2287       A qualifier may be any one of the following:
2288
2289       /      directories
2290
2291       F      `full' (i.e. non-empty) directories.   Note  that  the  opposite
2292              sense (^F) expands to empty directories and all non-directories.
2293              Use (/^F) for empty directories.
2294
2295       .      plain files
2296
2297       @      symbolic links
2298
2299       =      sockets
2300
2301       p      named pipes (FIFOs)
2302
2303       *      executable plain files (0100 or 0010 or 0001)
2304
2305       %      device files (character or block special)
2306
2307       %b     block special files
2308
2309       %c     character special files
2310
2311       r      owner-readable files (0400)
2312
2313       w      owner-writable files (0200)
2314
2315       x      owner-executable files (0100)
2316
2317       A      group-readable files (0040)
2318
2319       I      group-writable files (0020)
2320
2321       E      group-executable files (0010)
2322
2323       R      world-readable files (0004)
2324
2325       W      world-writable files (0002)
2326
2327       X      world-executable files (0001)
2328
2329       s      setuid files (04000)
2330
2331       S      setgid files (02000)
2332
2333       t      files with the sticky bit (01000)
2334
2335       fspec  files with access rights matching spec. This spec may be a octal
2336              number optionally preceded by a `=', a `+', or a `-'. If none of
2337              these characters is given, the behavior is the same as for  `='.
2338              The octal number describes the mode bits to be expected, if com‐
2339              bined with a `=', the value given must match the file-modes  ex‐
2340              actly, with a `+', at least the bits in the given number must be
2341              set in the file-modes, and with a `-', the bits  in  the  number
2342              must  not be set. Giving a `?' instead of a octal digit anywhere
2343              in the  number  ensures  that  the  corresponding  bits  in  the
2344              file-modes  are  not checked, this is only useful in combination
2345              with `='.
2346
2347              If the qualifier `f' is followed by any other character anything
2348              up  to the next matching character (`[', `{', and `<' match `]',
2349              `}', and `>' respectively, any other character  matches  itself)
2350              is  taken  as a list of comma-separated sub-specs. Each sub-spec
2351              may be either an octal number as described above or  a  list  of
2352              any of the characters `u', `g', `o', and `a', followed by a `=',
2353              a `+', or a `-', followed by a list of  any  of  the  characters
2354              `r',  `w',  `x', `s', and `t', or an octal digit. The first list
2355              of characters specify which access rights are to be checked.  If
2356              a  `u'  is given, those for the owner of the file are used, if a
2357              `g' is given, those of the group are checked,  a  `o'  means  to
2358              test  those  of  other users, and the `a' says to test all three
2359              groups. The `=', `+', and `-' again says how the modes are to be
2360              checked  and  have  the  same meaning as described for the first
2361              form above. The second list of characters finally says which ac‐
2362              cess  rights  are  to  be expected: `r' for read access, `w' for
2363              write access, `x' for the right  to  execute  the  file  (or  to
2364              search a directory), `s' for the setuid and setgid bits, and `t'
2365              for the sticky bit.
2366
2367              Thus, `*(f70?)' gives the files for which the  owner  has  read,
2368              write, and execute permission, and for which other group members
2369              have no rights, independent of the permissions for other  users.
2370              The  pattern `*(f-100)' gives all files for which the owner does
2371              not have execute permission,  and  `*(f:gu+w,o-rx:)'  gives  the
2372              files  for  which  the  owner and the other members of the group
2373              have at least write permission, and for which other users  don't
2374              have read or execute permission.
2375
2376       estring
2377       +cmd   The string will be executed as shell code.  The filename will be
2378              included in the list if and only if the code returns a zero sta‐
2379              tus (usually the status of the last command).
2380
2381              In  the  first  form,  the first character after the `e' will be
2382              used as a separator and anything up to the next matching separa‐
2383              tor  will  be taken  as the string; `[', `{', and `<' match `]',
2384              `}', and `>', respectively, while any  other  character  matches
2385              itself.  Note  that  expansions  must be quoted in the string to
2386              prevent them  from  being  expanded  before  globbing  is  done.
2387              string  is  then executed as shell code.  The string globqual is
2388              appended to the array zsh_eval_context the  duration  of  execu‐
2389              tion.
2390
2391              During  the  execution  of  string  the filename currently being
2392              tested is available in the parameter REPLY; the parameter may be
2393              altered  to a string to be inserted into the list instead of the
2394              original filename.  In addition, the parameter reply may be  set
2395              to an array or a string, which overrides the value of REPLY.  If
2396              set to an array, the latter is inserted into  the  command  line
2397              word by word.
2398
2399              For   example,  suppose  a  directory  contains  a  single  file
2400              `lonely'.  Then the  expression  `*(e:'reply=(${REPLY}{1,2})':)'
2401              will cause the words `lonely1' and `lonely2' to be inserted into
2402              the command line.  Note the quoting of string.
2403
2404              The form +cmd has the same  effect,  but  no  delimiters  appear
2405              around  cmd.   Instead,  cmd is taken as the longest sequence of
2406              characters following the + that are alphanumeric or  underscore.
2407              Typically cmd will be the name of a shell function that contains
2408              the appropriate test.  For example,
2409
2410                     nt() { [[ $REPLY -nt $NTREF ]] }
2411                     NTREF=reffile
2412                     ls -ld -- *(+nt)
2413
2414              lists all files in the directory that have  been  modified  more
2415              recently than reffile.
2416
2417       ddev   files on the device dev
2418
2419       l[-|+]ct
2420              files having a link count less than ct (-), greater than ct (+),
2421              or equal to ct
2422
2423       U      files owned by the effective user ID
2424
2425       G      files owned by the effective group ID
2426
2427       uid    files owned by user ID id if that is a  number.   Otherwise,  id
2428              specifies a user name: the character after the `u' will be taken
2429              as a separator and the string between it and the  next  matching
2430              separator will be taken as a user name.  The starting separators
2431              `[', `{', and `<' match the final separators `]', `}', and  `>',
2432              respectively;  any other character matches itself.  The selected
2433              files are those owned by this user.  For  example,  `u:foo:'  or
2434              `u[foo]' selects files owned by user `foo'.
2435
2436       gid    like uid but with group IDs or names
2437
2438       a[Mwhms][-|+]n
2439              files  accessed  exactly  n days ago.  Files accessed within the
2440              last n days are selected using a  negative  value  for  n  (-n).
2441              Files accessed more than n days ago are selected by a positive n
2442              value (+n).  Optional unit specifiers `M', `w', `h', `m' or  `s'
2443              (e.g.  `ah5') cause the check to be performed with months (of 30
2444              days), weeks, hours, minutes or seconds instead of days, respec‐
2445              tively.  An explicit `d' for days is also allowed.
2446
2447              Any  fractional  part  of the difference between the access time
2448              and the current part in the appropriate units is ignored in  the
2449              comparison.   For  instance, `echo *(ah-5)' would echo files ac‐
2450              cessed within the last five hours, while  `echo  *(ah+5)'  would
2451              echo  files  accessed  at least six hours ago, as times strictly
2452              between five and six hours are treated as five hours.
2453
2454       m[Mwhms][-|+]n
2455              like the file access qualifier, except that  it  uses  the  file
2456              modification time.
2457
2458       c[Mwhms][-|+]n
2459              like the file access qualifier, except that it uses the file in‐
2460              ode change time.
2461
2462       L[+|-]n
2463              files less than n bytes (-), more than n bytes (+), or exactly n
2464              bytes in length.
2465
2466              If this flag is directly followed by a size specifier `k' (`K'),
2467              `m' (`M'), or `p' (`P') (e.g. `Lk-50') the  check  is  performed
2468              with  kilobytes,  megabytes,  or  blocks (of 512 bytes) instead.
2469              (On some systems additional specifiers are available  for  giga‐
2470              bytes,  `g' or `G', and terabytes, `t' or `T'.) If a size speci‐
2471              fier is used a file is regarded as "exactly"  the  size  if  the
2472              file size rounded up to the next unit is equal to the test size.
2473              Hence `*(Lm1)' matches files from 1 byte up to 1 Megabyte inclu‐
2474              sive.  Note also that the set of files "less than" the test size
2475              only includes files that would  not  match  the  equality  test;
2476              hence `*(Lm-1)' only matches files of zero size.
2477
2478       ^      negates all qualifiers following it
2479
2480       -      toggles  between  making  the  qualifiers work on symbolic links
2481              (the default) and the files they point to, if any; any  symbolic
2482              link for whose target the `stat' system call fails (whatever the
2483              cause of the failure) is treated as a file in its own right
2484
2485       M      sets the MARK_DIRS option for the current pattern
2486
2487       T      appends a trailing qualifier mark to the filenames, analogous to
2488              the LIST_TYPES option, for the current pattern (overrides M)
2489
2490       N      sets the NULL_GLOB option for the current pattern
2491
2492       D      sets the GLOB_DOTS option for the current pattern
2493
2494       n      sets the NUMERIC_GLOB_SORT option for the current pattern
2495
2496       Yn     enables short-circuit mode: the pattern will expand to at most n
2497              filenames.  If more than n  matches  exist,  only  the  first  n
2498              matches in directory traversal order will be considered.
2499
2500              Implies oN when no oc qualifier is used.
2501
2502       oc     specifies  how the names of the files should be sorted. The fol‐
2503              lowing values of c sort in the following ways:
2504
2505              n      By name.
2506              L      By the size (length) of the files.
2507              l      By number of links.
2508              a      By time of last access, youngest first.
2509              m      By time of last modification, youngest first.
2510              c      By time of last inode change, youngest first.
2511              d      By directories: files  in  subdirectories  appear  before
2512                     those  in  the  current  directory  at  each level of the
2513                     search -- this is best combined with other criteria,  for
2514                     example `odon' to sort on names for files within the same
2515                     directory.
2516              N      No sorting is performed.
2517              estring
2518              +cmd   Sort by shell code (see below).
2519
2520              Note that the modifiers ^ and - are used, so `*(^-oL)'  gives  a
2521              list  of all files sorted by file size in descending order, fol‐
2522              lowing any symbolic links.  Unless oN is  used,  multiple  order
2523              specifiers may occur to resolve ties.
2524
2525              The  default  sorting is n (by name) unless the Y glob qualifier
2526              is used, in which case it is N (unsorted).
2527
2528              oe and o+ are special cases; they are  each  followed  by  shell
2529              code, delimited as for the e glob qualifier and the + glob qual‐
2530              ifier respectively (see above).  The code is executed  for  each
2531              matched  file  with  the  parameter REPLY set to the name of the
2532              file on entry and globsort appended  to  zsh_eval_context.   The
2533              code  should modify the parameter REPLY in some fashion.  On re‐
2534              turn, the value of the parameter is used  instead  of  the  file
2535              name  as  the string on which to sort.  Unlike other sort opera‐
2536              tors, oe and o+ may be repeated, but note that the maximum  num‐
2537              ber  of  sort  operators of any kind that may appear in any glob
2538              expression is 12.
2539
2540       Oc     like `o', but sorts in descending order; i.e.  `*(^oc)'  is  the
2541              same  as  `*(Oc)' and `*(^Oc)' is the same as `*(oc)'; `Od' puts
2542              files in the current directory before those in subdirectories at
2543              each level of the search.
2544
2545       [beg[,end]]
2546              specifies  which  of the matched filenames should be included in
2547              the returned list. The syntax is the  same  as  for  array  sub‐
2548              scripts.  beg  and  the optional end may be mathematical expres‐
2549              sions. As in parameter subscripting they may be negative to make
2550              them  count  from  the  last match backward. E.g.: `*(-OL[1,3])'
2551              gives a list of the names of the three largest files.
2552
2553       Pstring
2554              The string will be prepended to each glob match  as  a  separate
2555              word.  string is delimited in the same way as arguments to the e
2556              glob qualifier described above.  The qualifier can be  repeated;
2557              the words are prepended separately so that the resulting command
2558              line contains the words in the same order they were given in the
2559              list of glob qualifiers.
2560
2561              A typical use for this is to prepend an option before all occur‐
2562              rences of a file name; for example, the pattern `*(P:-f:)'  pro‐
2563              duces the command line arguments `-f file1 -f file2 ...'
2564
2565              If  the  modifier  ^ is active, then string will be appended in‐
2566              stead of prepended.  Prepending and appending is  done  indepen‐
2567              dently  so both can be used on the same glob expression; for ex‐
2568              ample by writing `*(P:foo:^P:bar:^P:baz:)'  which  produces  the
2569              command line arguments `foo baz file1 bar ...'
2570
2571       More  than one of these lists can be combined, separated by commas. The
2572       whole list matches if at least one of the sublists  matches  (they  are
2573       `or'ed,  the qualifiers in the sublists are `and'ed).  Some qualifiers,
2574       however, affect all matches generated, independent of  the  sublist  in
2575       which  they  are  given.   These are the qualifiers `M', `T', `N', `D',
2576       `n', `o', `O' and the subscripts given in brackets (`[...]').
2577
2578       If a `:' appears in a qualifier list, the remainder of  the  expression
2579       in  parenthesis  is  interpreted  as a modifier (see the section `Modi‐
2580       fiers' in the section `History Expansion').  Each modifier must be  in‐
2581       troduced  by a separate `:'.  Note also that the result after modifica‐
2582       tion does not have to be an existing file.  The name  of  any  existing
2583       file  can be followed by a modifier of the form `(:...)' even if no ac‐
2584       tual filename generation is performed, although note that the  presence
2585       of  the parentheses causes the entire expression to be subjected to any
2586       global pattern matching options such as NULL_GLOB. Thus:
2587
2588              ls -ld -- *(-/)
2589
2590       lists all directories and symbolic links that point to directories, and
2591
2592              ls -ld -- *(-@)
2593
2594       lists all broken symbolic links, and
2595
2596              ls -ld -- *(%W)
2597
2598       lists all world-writable device files in the current directory, and
2599
2600              ls -ld -- *(W,X)
2601
2602       lists all files in the current directory  that  are  world-writable  or
2603       world-executable, and
2604
2605              print -rC1 /tmp/foo*(u0^@:t)
2606
2607       outputs  the basename of all root-owned files beginning with the string
2608       `foo' in /tmp, ignoring symlinks, and
2609
2610              ls -ld -- *.*~(lex|parse).[ch](^D^l1)
2611
2612       lists all files having a link count of one whose names  contain  a  dot
2613       (but  not  those  starting  with  a  dot, since GLOB_DOTS is explicitly
2614       switched off) except for lex.c, lex.h, parse.c and parse.h.
2615
2616              print -rC1 b*.pro(#q:s/pro/shmo/)(#q.:s/builtin/shmiltin/)
2617
2618       demonstrates how colon modifiers and other qualifiers  may  be  chained
2619       together.   The ordinary qualifier `.' is applied first, then the colon
2620       modifiers in order from left to right.  So if EXTENDED_GLOB is set  and
2621       the  base  pattern matches the regular file builtin.pro, the shell will
2622       print `shmiltin.shmo'.
2623
2624
2625
2626zsh 5.9                          May 14, 2022                       ZSHEXPN(1)
Impressum