zshexpn man page on IRIX

Man page or keyword search:  
man Server   31559 pages
apropos Keyword Search (all sections)
Output format
IRIX logo
[printable version]



ZSHEXPN(1)					       ZSHEXPN(1)

NAME
       zshexpn - zsh command and parameter expansion

DESCRIPTION
       The  types  of expansions performed are history expansion,
       alias expansion, process	 substitution,	parameter  expan_
       sion,  command  substitution,  arithmetic expansion, brace
       expansion, filename expansion, and filename generation.

       Exansion is done in the	above  specified  order	 in  five
       steps.	The first is History expansion which is only per
       formed in interactive shells.   The  next  step	is  alias
       expansion  which	 is done right before the command line is
       parsed.	They are followed by process substitution, param_
       eter expansion, command substitution, arithmetic expansion
       and brace expansion which are preformed	in  one	 step  in
       left-to-right   fashion.	  After	  these	 expansions,  all
       unquoted occurrences of the characters \,  ',  and  "  are
       removed	and the result is subjected to filename expansion
       followed by filename generation.

       If the SH_FILE_EXPANSION	 option	 is  set,  the	order  of
       expansion  is  modified for compatibility with sh and ksh.
       Filename expansion is performed	immediately  after  alias
       substitution, preceding the set of five substitutions men
       tioned above.

FILENAME EXPANSION
       Each word is checked to see if it begins with an	 unquoted
       ~.  If it does, then the word up to a /, or the end of the
       word if there is no /, is checked to see if it can be sub
       stituted	 in  one of the ways described here.  If so, then
       the ~ and the checked portion are replaced with the appro
       priate substitute value.

       A ~ by itself is replaced by the value of the HOME parame
       ter.  A ~ followed by a + or a - is replaced by the  value
       of PWD or OLDPWD, respectively.

       A  ~  followed by a number is replaced by the directory at
       that position in the directory stack.  ~0 is equivalent to
       ~+, and ~1 is the top of the stack.  ~+ followed by a num
       ber is replaced by the directory at that position  in  the
       directory  stack.  ~+0 is equivalent to ~+, and ~+1 is the
       top of the stack.  ~- followed by a number is replaced  by
       the  directory  that many positions from the bottom of the
       stack.  ~-0 is the bottom of the stack.	 The  PUSHD_MINUS
       option  exchanges  the effects of ~+ and ~- where they are
       followed by a number.

       A ~ followed by anything not already covered is looked  up
       as  a  named  directory, and replaced by the value of that
       named directory if found.  Named directories are typically
       home  directories  for users on the system.  They may also

zsh version 3.0		  June 26, 1996				1

ZSHEXPN(1)					       ZSHEXPN(1)

       be defined if the text after the ~ is the name of a string
       shell  parameter	 whose value begins with a /.  It is also
       possible to define directory names using the  `-d'  option
       to the hash builtin.

       In  certain circumstances (in prompts, for instance), when
       the shell prints a path, the path is checked to see if  it
       has a named directory as its prefix.  If so, then the pre
       fix portion is replaced with a ~ followed by the	 name  of
       the  directory.	 The  shortest	way  of	 referring to the
       directory is used, with ties broken in favour of	 using	a
       named directory, except when the directory is /.

       If  a word begins with an unquoted = and the EQUALS option
       is set, the remainder of the word is taken as the name  of
       a command or alias.  If a command exists by that name, the
       word is replaced by the full pathname of the command.   If
       an  alias  exists  by that name, the word is replaced with
       the text of the alias.

       Filename expansion is performed on the right hand side  of
       a  parameter  assignment,  including those appearing after
       commands of the typeset family.	In this case,  the  right
       hand side will be treated as a colon-separated list in the
       manner of PATH so that a ~ or an = following a : is eligi
       ble  for	 expansion.  All such behavior can be disabled by
       quoting the ~, the =, or the  whole  expression	(but  not
       simply the colon); the EQUALS option is also respected.

       If the option MAGIC_EQUAL_SUBST is set, any unquoted shell
       argument in the form identifier=expression becomes  eligi
       ble  for file expansion as described in the previous para
       graph.  Quoting the first = also inhibits this.

PROCESS SUBSTITUTION
       Each command argument of the form <(list)  or  >(list)  or
       =(list)	is  subject to process substitution.  In the case
       of the < or > forms, the shell will run process list asyn
       chronously  connected to a named pipe (FIFO).  The name of
       this pipe will become the argument to the command.  If the
       form  with  >  is  selected then writing on this file will
       provide input for list.	If  <  is  used,  then	the  file
       passed  as  an  argument will be a named pipe connected to
       the output of the list process.	For example,

	      paste <(cut -f1  file1)  <(cut  -f3  file2)  |  tee
	      >(process1) >(process2) >/dev/null

       cuts fields 1 and 3 from the files file1 and file2 respec
       tively, pastes the results together, and sends it  to  the
       processes  process1  and	 process2.   Note  that the file,
       which is passed as an argument to the command, is a system
       pipe  so programs that expect to lseek(2) on the file will
       not work.  Also note that the previous example can be more

zsh version 3.0		  June 26, 1996				2

ZSHEXPN(1)					       ZSHEXPN(1)

       compactly and efficiently written as:

	      paste  <(cut  -f1	 file1) <(cut -f3 file2) > >(pro_
	      cess1) > >(process2)

       The shell uses pipes instead of	FIFOs  to  implement  the
       latter two process substitutions in the above example.

       If  = is used, then the file passed as an argument will be
       the name of a temporary file containing the output of  the
       list  process.  This may be used instead of the < form for
       a program that expects to lseek(2) on the input file.

PARAMETER EXPANSION
       The character $ is used to introduce parameter expansions.
       See  PARAMETERS below for a description of parameters.  In
       the expansions discussed below that require a pattern, the
       form  of the pattern is the same as that used for filename
       generation; see Filename Generation.

	      ${name}
		     The value, if any, of the parameter name  is
		     substituted.   The	 braces	 are  required if
		     name is followed  by  a  letter,  digit,  or
		     underscore	 that is not to be interpreted as
		     part of its  name.	  If  name  is	an  array
		     parameter,	 then  the values of each element
		     of name  is  substituted,	one  element  per
		     word.   Otherwise,	 the expansion results in
		     one word only; no field splitting is done on
		     the  result  unless the SH_WORD_SPLIT option
		     is set.

	      ${+name}
		     If name is the name of a set  parameter  `1'
		     is	 substituted,  otherwise  `0'  is substi
		     tuted.

	      ${name:-word}
		     If name is set and is non-null then  substi
		     tute  its	value; otherwise substitute word.
		     If name is missing, substitute word.

	      ${name:=word}
		     If name is unset or is null then set  it  to
		     word;  the	 value	of  the parameter is then
		     substituted.

	      ${name::=word}
		     Set name to word; the value of the parameter
		     is then substituted.

	      ${name:?word}
		     If	  name	is  set	 and  is  non-null,  then

zsh version 3.0		  June 26, 1996				3

ZSHEXPN(1)					       ZSHEXPN(1)

		     substitute its value; otherwise, print  word
		     and exit from the shell.  Interactive shells
		     do not exit.  If word  is	omitted,  then	a
		     standard message is printed.

	      ${name:+word}
		     If	 name is set and is non-null then substi
		     tute word; otherwise substitute nothing.
	      ${name#pattern}
	      ${name##pattern}
		     If the pattern matches the beginning of  the
		     value  of name, then substitute the value of
		     name with the matched portion deleted;  oth
		     erwise,  just  substitute the value of name.
		     In the first  form,  the  smallest	 matching
		     pattern  is  preferred;  in the second form,
		     the largest matching pattern  is  preferred.
		     If	 name is an array and the substitution is
		     not quoted or the @ flag or the name[@] syn
		     tax  is  used, matching is performed on each
		     array elements separately.
	      ${name%pattern}
	      ${name%%pattern}
		     If the pattern matches the end of the  value
		     of	 name,	then substitute the value of name
		     with the matched portion deleted; otherwise,
		     just  substitute  the value of name.  In the
		     first form, the smallest matching pattern is
		     preferred;	 in  the second form, the largest
		     matching pattern is preferred. If name is an
		     array  and the substitution is not quoted or
		     the @ flag or the name[@]	syntax	is  used,
		     matching is performed on each array elements
		     separately.

	      ${name:#pattern}
		     If the pattern matches the	 value	of  name,
		     then substitute the empty string; otherwise,
		     just substitute the value of name.	 If  name
		     is	 an  array  and	 the  substitution is not
		     quoted or the @ flag or the  name[@]  syntax
		     is used, matching is performed on each array
		     elements separately, and the  matched  array
		     elements  are  removed  (use  the	M flag to
		     remove the non-matched elements).

	      ${#spec}
		     If spec is one of the  above  substitutions,
		     substitute	 the  length in characters of the
		     result instead of	the  result  itself.   If
		     spec  is an array expression, substitute the
		     number of elements of the result.

zsh version 3.0		  June 26, 1996				4

ZSHEXPN(1)					       ZSHEXPN(1)

	      ${^spec}
		     Turn on the RC_EXPAND_PARAM option	 for  the
		     evaluation	 of  spec;  if	the ^ is doubled,
		     turn it off.  When this option is set, array
		     expansions	 of  the  form foo${xx}bar, where
		     the parameter xx is set to (a b c), are sub
		     stituted	with   fooabar	 foobbar  foocbar
		     instead of the default fooa b cbar.

	      ${=spec}
		     Turn on the  SH_WORD_SPLIT	 option	 for  the
		     evaluation	 of  spec;  if	the = is doubled,
		     turn it  off.   When  this	 option	 is  set,
		     parameter	values	are  split  into separate
		     words using IFS as a delimiter  before  sub
		     stitution.	  This is done by default in most
		     other shells.

	      ${~spec}
		     Turn on the GLOB_SUBST option for the evalu
		     ation  of spec; if the ~ is doubled, turn it
		     off.  When this option is set,  any  pattern
		     characters	 resulting  from the substitution
		     become eligible for file expansion and file
		     name generation.

       If  the colon is omitted from one of the above expressions
       containing a colon, then the  shell  only  checks  whether
       name is set or not, not whether it is null.

       If  a  ${...}  type  parameter expression or a $(...) type
       command substitution is used in place of name above, it is
       substituted  first  and	the result is used as it were the
       value of name.

       If the opening brace is directly followed  by  an  opening
       parentheses  the	 string up to the matching closing paren
       theses will be taken as a list of flags.	 Where	arguments
       are  valid,  any character, or the matching pairs `(...)',
       `{...}', `[...]', or `<...>',  may be used in place of the
       colon as delimiters.  The following flags are supported:

	      A	     Create  an	 array parameter with ${...:=...}
		     or ${...::=...}.  Assignment is made  before
		     sorting or padding.

	      @	     In	 double	 quotes,  array	 elements are put
		     into separate  words.   Eg.  "${(@)foo}"  is
		     equivalent	     to	     "${foo[@]}"      and
		     "${(@)foo[1,2]}" is the  same  as	"$foo[1]"
		     "$foo[2]".

	      e	     Perform parameter expansion, command substi_
		     tution  and  arithmetic  expansion	 on   the

zsh version 3.0		  June 26, 1996				5

ZSHEXPN(1)					       ZSHEXPN(1)

		     result.  Such  expansions	can be nested but
		     too deep recursion	 may  have  unpredictable
		     effects.

	      o	     Sort the resulting words in ascending order.

	      O	     Sort  the	resulting  words  in   descending
		     order.

	      i	     With o or O, sort case-independently.

	      L	     Convert  all  letters in the result to lower
		     case.

	      U	     Convert all letters in the result	to  upper
		     case.

	      C	     Capitalize the resulting words.

	      c	     With  ${#name},  count  the  total number of
		     characters in an array, as if  the	 elements
		     were  concatenated with spaces between them.

	      w	     With ${#name},  count  words  in  arrays  or
		     strings;  the  s  flag  may be used to set a
		     word delimiter.

	      W	     Similar to w with the difference that  empty
		     words  between  repeated delimiters are also
		     counted.

	      p	     Recognize the same escape sequences  as  the
		     print  builtin in string arguments to subse
		     quent flags.

	      l:expr::string1::string2:
		     Pad the resulting words on the  left.   Each
		     word  will	 be  truncated	if  required  and
		     placed in a field expr characters wide.  The
		     space  to	the  left  will	 be  filled  with
		     string1 (concatenated as often as needed) or
		     spaces  if	 string1  is  not given.  If both
		     string1 and string2 are given,  this  string
		     is	 inserted  once	 directly  to the left of
		     each word, before padding.

	      r:expr::string1::string2:
		     As l..., but pad the words on the right  and
		     insert string2 on the right.

	      j:string:
		     Join  the	words  of  arrays  together using
		     string  as	 a  separator.	 Note  that  this
		     occurs   before   word   splitting	  by  the

zsh version 3.0		  June 26, 1996				6

ZSHEXPN(1)					       ZSHEXPN(1)

		     SH_WORD_SPLIT option.

	      F	     Join the words of arrays together using new
		     line  as  a  separator.  This is a shorthand
		     for pj:\n:.

	      s:string:
		     Force  word  splitting   (see   the   option
		     SH_WORD_SPLIT)   at  the  separator  string.
		     Splitting only occurs  in	places	where  an
		     array  value  is  valid,  and joining always
		     occurs before splitting.

	      f	     Split the result of the expansion to  lines.
		     This is a shorthand for ps:\n:.

	      (All  remaining  flags  are  useful  only	 with the
	      ${...#...} or ${...%...} forms.)

	      S	     Search substrings as well as  beginnings  or
		     ends.

	      I:expr:
		     Search  the expr'th match (where expr evalu
		     ates to a number).

	      M	     Include the matched portion in the result.

	      R	     Include the unmatched portion in the  result
		     (the Rest).

	      B	     Include  the  index  of the beginning of the
		     match in the result.

	      E	     Include the index of the end of the match in
		     the result.

	      N	     Include  the  length  of  the  match  in the
		     result.

COMMAND SUBSTITUTION
       A command enclosed in parentheses  preceded  by	a  dollar
       sign,  like so: $(...) or quoted with grave accents: `...`
       is replaced with its standard output,  with  any	 trailing
       newlines	 deleted.  If the substitution is not enclosed in
       double quotes, the output is broken into words  using  the
       IFS   parameter.	  The  substitution  $(cat  foo)  may  be
       replaced by the equivalent but faster $(<foo).  In  either
       case, if the option GLOB_SUBST is set the output is eligi
       ble for filename generation.

ARITHMETIC EXPANSION
       A string of the form $[exp]  or	$((exp))  is  substituted

zsh version 3.0		  June 26, 1996				7

ZSHEXPN(1)					       ZSHEXPN(1)

       with  the  value	 of the arithmetic expression exp. exp is
       subjected to parameter expansion, command substitution and
       arithmetic  expansion  before it is evaluated.  See ARITH
       METIC EVALUATION in zshmisc(1).

BRACE EXPANSION
       A string of the form foo{xx,yy,zz}bar is expanded  to  the
       individual  words fooxxbar, fooyybar, and foozzbar.  Left-
       to-right	 order	is  preserved.	 This  construct  may  be
       nested.	 Commas	 may  be  quoted in order to include them
       literally in a word.

       An expression of the form {n1..n2}, where n1  and  n2  are
       integers,  is  expanded to every number between n1 and n2,
       inclusive.  If either number begins with a zero,	 all  the
       resulting  numbers  will	 be padded with leading zeroes to
       that minimum width.  If	the  numbers  are  in  decreasing
       order  the  resulting  sequence will also be in decreasing
       order.

       If a brace expression matches none of the above forms,  it
       is left unchanged, unless the BRACE_CCL option is set.  In
       that case, it is expanded to a sorted list of the individ
       ual  characters	between	 the  braces,  in the manner of a
       search set.  `-' is treated specially as in a search  set,
       but `^' or `!' as the first character is treated normally.

FILENAME GENERATION (GLOBBING)
       If a word contains an unquoted  instance	 of  one  of  the
       characters  *,  |, <, [, or ?, it is regarded as a pattern
       for filename generation, unless the GLOB option is  unset.
       If  the EXTENDED_GLOB option is set, the ^,  ~ and # char
       acters also denote a pattern;  otherwise	 (except  for  an
       initial	~,  see	 Filename  Expansion  above) they are not
       treated specially by the shell.	The word is replaced with
       a  list of sorted filenames that match the pattern.  If no
       matching pattern is found, the shell gives an  error  mes
       sage,  unless  the  NULL_GLOB option is set, in which case
       the word is deleted;  or	 unless	 the  NOMATCH  option  is
       unset, in which case the word is left unchanged.	 In file
       name generation, the character / must be	 matched  explic
       itly;  also,  a . must be matched explicitly at the begin
       ning of a pattern or  after  a  /,  unless  the	GLOB_DOTS
       option is set.  No filename generation pattern matches the
       files "." or "..".  In other instances of  pattern  match
       ing, the / and . are not treated specially.

	      *	     matches   any  string,  including	the  null
		     string.
	      ?	     matches any character.
	      [...]  matches  any  of  the  enclosed  characters.
		     Ranges  of	 characters  can  be specified by
		     separating two characters by a -.	A - or	]
		     may  be matched by including it as the first

zsh version 3.0		  June 26, 1996				8

ZSHEXPN(1)					       ZSHEXPN(1)

		     character in the list.
	      [^...]
	      [!...] like [...], except that it matches any char
		     acter which is not in the given set.

	      <x-y>  matches  any  number  in  the  range x to y,
		     inclusive.	 If x is omitted, the number must
		     be	 less  than or equal to y.  If y is omit
		     ted, the number  must  be	greater	 than  or
		     equal  to	x.   A	pattern	 of  the form <->
		     matches any number.

	      ^x     matches anything except the pattern x.

	      x|y    matches either x or y.

	      x#     matches zero or more occurrences of the pat
		     tern x.

	      x##    matches  one or more occurrences of the pat
		     tern x.

       Parentheses may be used for grouping.   Note  that  the	|
       character  must be within parentheses, so that the lexical
       analyzer does not think it is a pipe character.	Also note
       that "/" has a higher precedence than "^"; that is:

	      ls ^foo/bar

       will  search  directories in "." except "./foo" for a file
       named bar.

       A pathname component of the form (foo/)#	 matches  a  path
       consisting  of  zero or more directories matching the pat
       tern foo.  As a shorthand, **/  is  equivalent  to  (*/)#.
       Thus:

	      ls (*/)#bar

       or

	      ls **/bar

       does a recursive directory search for files named bar, not
       following symbolic links.  To follow symbolic  links,  use
       the form ***/.

       If  used for filename generation, a pattern may contain an
       exclusion  specifier.   Such  patterns  are  of	the  form
       pat1~pat2.   This pattern will generate all files matching
       pat1, but which do not match pat2.  For example, *.c~lex.c
       will  match all files ending in .c, except the file lex.c.
       This may appear inside parentheses.  Note that "~"  has	a
       higher precedence than "|", so that pat1|pat2~pat3 matches

zsh version 3.0		  June 26, 1996				9

ZSHEXPN(1)					       ZSHEXPN(1)

       any time that pat1 matches, or if pat2 matches while  pat3
       does  not.   Note also that "/" characters are not treated
       specially in the exclusion specifier so that  a	"*"  will
       match multiple path segments if they appear in the pattern
       to the left of the "~".

       Patterns used for filename generation may also  end  in	a
       list  of	 qualifiers  enclosed in parentheses.  The quali
       fiers specify which filenames  that  otherwise  match  the
       given  pattern  will  be inserted in the argument list.	A
       qualifier may be any one of the following:
	      /	     directories
	      .	     plain files
	      @	     symbolic links
	      =	     sockets
	      p	     named pipes (FIFOs)
	      *	     executable plain files (0100)
	      %	     device files (character or block special)
	      %b     block special files
	      %c     character special files
	      r	     owner-readable files (0400)
	      w	     owner-writable files (0200)
	      x	     owner-executable files (0100)
	      A	     group-readable files (0040)
	      I	     group-writable files (0020)
	      E	     group-executable files (0010)
	      R	     world-readable files (0004)
	      W	     world-writable files (0002)
	      X	     world-executable files (0001)
	      s	     setuid files (04000)
	      S	     setgid files (02000)
	      t	     files with the sticky bit (01000)
	      ddev   files on the device dev
	      l[-|+]ct
		     files having a link count less than ct  (-),
		     greater than ct (+), or is equal to ct
	      U	     files owned by the effective user id
	      G	     files owned by the effective group id
	      uid    files owned by user id id if it is a number,
		     if not, than the character after the u  will
		     be	 used  as  a  separator	 and  the  string
		     between it and the next  matching	separator
		     (`(', `[', `{', and `<' match `)', `]', `}',
		     and `>' respectively,  any	 other	character
		     matches itself) will be taken as a user name
		     and the user id of this user will	be  taken
		     (e.g. u:foo: or u[foo] for user foo)
	      gid    like uid but with group ids or names
	      a[Mwhms][-|+]n
		     files  accessed  exactly  n days ago.  Files
		     accessed within the last n days are selected
		     using  a  negative	 value for n (-n).  Files
		     accessed more than n days ago  are	 selected
		     by	 a  positive n value (+n).  Optional unit

zsh version 3.0		  June 26, 1996			       10

ZSHEXPN(1)					       ZSHEXPN(1)

		     specifiers M, w, h, m, or s (e.g. ah5) cause
		     the check to be performed with months (of 30
		     days), weeks,  hours,  minutes,  or  seconds
		     instead	of   days,   respectively.    For
		     instance,	echo  *(ah-5)  would  echo  files
		     accessed within the last five hours.
	      m[Mwhms][-|+]n
		     like  the file access qualifier, except that
		     it uses the file modification time.
	      c[Mwhms][-|+]n
		     like the file access qualifier, except  that
		     it uses the file inode change time.
	      L[+|-]n
		     files  less  than	n  bytes (-), more than n
		     bytes (+), or exactly n bytes in length.  If
		     this flag is directly followed by a k (K), m
		     (M), or p (P) (e.g. Lk+50) the check is per
		     formed  with kilobytes, megabytes, or blocks
		     (of 512 bytes) instead.
	      ^	     negates all qualifiers following it
	      -	     toggles between making the	 qualifiers  work
		     on	 symbolic  links  (the	default)  and the
		     files they point to
	      M	     sets the MARK_DIRS option	for  the  current
		     pattern
	      T	     appends a traling qualifier mark to the file
		     names, analogous to the  LIST_TYPES  option,
		     for the current pattern (overrides M)
	      N	     sets  the	NULL_GLOB  option for the current
		     pattern
	      D	     sets the GLOB_DOTS option	for  the  current
		     pattern

       More than one of these lists can be combined, separated by
       commas. The whole list matches if at least one of the sub
       lists  matches  (they  are  `or'ed', the qualifiers in the
       sublists are `and'ed').

       If a : appears in a qualifier list, the remainder  of  the
       expression  in  parenthesis  is	interpreted as a modifier
       (see the	 subsection  Modifiers	of  the	 section  HISTORY
       EXPANSION).  Note that each modifier must be introduced by
       a separate :.  Note also that the result	 after	modifica
       tion  does  not	have to be an existing file.  The name of
       any existing file can be followed by  a	modifier  of  the
       form (:..) even if no filename generation is performed.

       Thus:

	      ls *(-/)

       lists  all  directories	and  symbolic links that point to
       directories, and

zsh version 3.0		  June 26, 1996			       11

ZSHEXPN(1)					       ZSHEXPN(1)

	      ls *(%W)

       lists all  world-writable  device  files	 in  the  current
       directory, and

	      ls *(W,X)

       lists  all  files in the current directory that are world-
       writable or world-executable, and

	      echo /tmp/foo*(u0^@:t)

       outputs the basename of	all  root-owned	 files	beginning
       with the string "foo" in /tmp, ignoring symlinks, and

	      ls *.*~(lex|parse).[ch](^D^l1)

       lists  all  files  having  a link count of one whose names
       contain a dot (but not those starting with  a  dot,  since
       GLOB_DOTS  is  explicitly  switched off) except for lex.c,
       lex.h, parse.c, and parse.h.

HISTORY EXPANSION
       History substitution allows you to use words from previous
       command	lines  in  the command line you are typing.  This
       simplifies spelling corrections and the repetition of com
       plicated	 commands  or arguments.  Command lines are saved
       in the history list, the size of which  is  controlled  by
       the   HISTSIZE  variable.   The	most  recent  command  is
       retained in any case.  A history substitution begins  with
       the  fist  character of the histchars parameter which is !
       by default and may occur anywhere  on  the  command  line;
       history	substitutions do not nest.  The !  can be escaped
       with \ or can be enclosed between a pair of single  quotes
       ('')  to	 suppress its special meaning. Double quotes will
       not work for this.

       Input lines containing history substitutions are echoed on
       the  terminal  after  being expanded, but before any other
       substitutions take place or the command gets executed.

   Event Designators
       An event designator is a reference to a command-line entry
       in the history list.
	      !	     Start  a  history	substitution, except when
		     followed by a blank, newline, =, or (.
	      !!     Refer to the previous command.   By  itself,
		     this  substitution repeats the previous com
		     mand.
	      !n     Refer to command-line n.
	      !-n    Refer to the current command-line minus n.
	      !str   Refer to the most	recent	command	 starting
		     with str.

zsh version 3.0		  June 26, 1996			       12

ZSHEXPN(1)					       ZSHEXPN(1)

	      !?str[?]
		     Refer  to the most recent command containing
		     str.
	      !#     Refer to the current command line	typed  in
		     so	 far.	The line is treated as if it were
		     complete up to and including the word before
		     the one with the !# reference.
	      !{...} Insulate  a  history reference from adjacent
		     characters (if necessary).

   Word Designators
       A word designator indicates which word or words of a given
       command	line  will be included in a history reference.	A
       `:' separates the event specification from the word desig
       nator.	It  can	 be omitted if the word designator begins
       with a ^, $, *, - or %.	Word designators include:
	      0	     The first input word (command).
	      n	     The n'th argument.
	      ^	     The first argument, that is, 1.
	      $	     The last argument.
	      %	     The word matched by (the most  recent)  ?str
		     search.
	      x-y    A range of words; -y abbreviates 0-y.
	      *	     All  the arguments, or a null value if there
		     is just one word in the event.
	      x*     Abbreviates x-$.
	      x-     Like x* but omitting word $.
       Note that a `%' word designator will only work  when  used
       as !%, !:%, !?str?:% and only when used after a !? substi
       tution.	Anything else will result in an	 error,	 although
       the error may not be the most obvious one.

   Modifiers
       After the optional word designator, you can add a sequence
       of one or more of the following modifiers,  each	 preceded
       by  a :.	 These modifiers also work on the result of file_
       name and parameter expansion.

	      h	     Remove a trailing pathname component,  leav
		     ing the head.
	      r	     Remove a trailing suffix of the form `.xxx',
		     leaving the basename.
	      e	     Remove all but the suffix.
	      t	     Remove  all  leading  pathname   components,
		     leaving the tail.
	      &	     Repeat the previous substitution.
	      g	     Apply  the change to the first occurrence of
		     a match in each word, by prefixing the above
		     (for example, g&).
	      p	     Print the new command but do not execute it.
	      q	     Quote the substituted words,  escaping  fur
		     ther substitutions.
	      x	     Like  q, but break into words at each blank.

zsh version 3.0		  June 26, 1996			       13

ZSHEXPN(1)					       ZSHEXPN(1)

	      l	     Convert the words to all lowercase.
	      u	     Convert the words to all uppercase.
	      f	     Repeats the immediately  (without	a  colon)
		     following	modifier until the resulting word
		     doesn't change any more. This and	the  fol
		     lowing  F,	 w  and W modifier only work with
		     parameter and filename expansion.
	      F:expr:
		     Like f, but repeats  only	n  times  if  the
		     expression	 expr evaluates to n. Any charac
		     ter can be used instead of the `:',  if  any
		     of	 `(',  `[', or `{' is used as the opening
		     delimiter the second one has to be ')', `]',
		     or `}' respectively.
	      w	     Makes  the	 immediately  following	 modifier
		     work on each word in the string.
	      W:sep: Like w but words are considered  to  be  the
		     parts  of	the  string that are separated by
		     sep. Any character can be	used  instead  of
		     the  `:',	opening	 parentheses  are handled
		     specially, see above.
	      s/l/r[/]
		     Substitute r for l.

       Unless preceded by a g, the substitution is done only  for
       the first string that matches l.

       The  left-hand  side  of	 substitutions	are  not  regular
       expressions, but character strings.  Any character can  be
       used  as	 the delimiter in place of /.  A backslash quotes
       the delimiter character.	 The character &,  in  the  right
       hand  side,  is	replaced  by the text from the left-hand-
       side.  The & can be quoted with a  backslash.   A  null	l
       uses the previous string either from a l or from a contex
       tual scan string s from !?s.  You can omit  the	rightmost
       delimiter  if  a newline immediately follows r; the right
       most ?  in a context scan can similarly be omitted.

       By default, a history reference with no	event  specifica
       tion refers to the same line as the last history reference
       on that command line, unless it is the first history  ref
       erence  in  a  command.	In that case, a history reference
       with no event specification always refers to the	 previous
       command.	  However,  if	the  option CSH_JUNKIE_HISTORY is
       set, then history reference with	 no  event  specification
       will  always  refer to the previous command.  For example,
       !!:1 will always refer to the first word of  the	 previous
       command	and !!$ will always refer to the last word of the
       previous command.  And with CSH_JUNKIE_HISTORY  set,  then
       !:1  and	 !$  will function in the same manner as !!:1 and
       !!$,  respectively.   However,  if  CSH_JUNKIE_HISTORY  is
       unset,  then  !:1  and !$ will refer to the first and last
       words respectively, of the last command referenced on  the
       current	command	 line.	 However,  if  they are the first

zsh version 3.0		  June 26, 1996			       14

ZSHEXPN(1)					       ZSHEXPN(1)

       history reference on the command line, then they refer  to
       the previous command.

       The  character sequence ^foo^bar repeats the last command,
       replacing the string "foo" with the string "bar".

       If the shell encounters the character sequence !"  in  the
       input, the history mechanism is temporarily disabled until
       the current list is fully parsed.  The !"  is removed from
       the  input,  and any subsequent !  characters have no spe
       cial significance.

       A less convenient but more comprehensible form of  command
       history	support	 is  provided  by the fc builtin (see the
       entry in zshbuiltins(1)).

zsh version 3.0		  June 26, 1996			       15

[top]

List of man pages available for IRIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net