Filename substitution
Up
Next
Previous
Filename substitution
If a word contains any of the characters `*', `?', `[' or `{' or begins with
the character `~' it is a candidate for filename substitution, also known as
``globbing''. This word is then regarded as a pattern (``glob-pattern''), and
replaced with an alphabetically sorted list of file names which match the
pattern.
In matching filenames, the character `.' at the beginning of a filename or
immediately following a `/', as well as the character `/' must be matched
explicitly. The character `*' matches any string of characters, including the
null string. The character `?' matches any single character. The sequence
`[...]' matches any one of the characters enclosed. Within `[...]', a pair of
characters separated by `-' matches any character lexically between the two.
(+) Some glob-patterns can be negated:
The sequence `[^...]' matches any single character not specified by the
characters and/or ranges of characters in the braces.
An entire glob-pattern can also be negated with `^':
> echo *
bang crash crunch ouch
> echo ^cr*
bang ouch
Glob-patterns which do not use `?', `*', or `[]' or which use `{}' or `~'
(below) are not negated correctly.
The metanotation `a{b,c,d}e' is a shorthand for `abe ace ade'.
Left-to-right order is preserved: `/usr/source/s1/{oldls,ls}.c' expands
to `/usr/source/s1/oldls.c /usr/source/s1/ls.c'. The results of matches are
sorted separately at a low level to preserve this order:
`../{memo,*box}' might expand to `../memo ../box ../mbox'.
(Note that `memo' was not sorted with the results of matching `*box'.)
It is not an error when this construct expands to files which do not exist,
but it is possible to get an error from a command to which the expanded list
is passed.
This construct may be nested.
As a special case the words `{', `}' and `{}' are passed undisturbed.
The character `~' at the beginning of a filename refers to home directories.
Standing alone, i.e. `~', it expands to the invoker's home directory as
reflected in the value of the home shell variable. When followed by a
name consisting of letters, digits and `-' characters the shell searches for a
user with that name and substitutes their home directory; thus `~ken' might
expand to `/usr/ken' and `~ken/chmach' to `/usr/ken/chmach'. If the character
`~' is followed by a character other than a letter or `/' or appears elsewhere
than at the beginning of a word, it is left undisturbed.
A command like `setenv MANPATH /usr/man:/usr/local/man:~/lib/man' does not,
therefore, do home directory substitution as one might hope.
It is an error for a glob-pattern containing `*', `?', `[' or `~', with or
without `^', not to match any files. However, only one pattern in a list of
glob-patterns must match a file (so that, e.g., `rm *.a *.c *.o' would fail
only if there were no files in the current directory ending in `.a', `.c', or
`.o'), and if the nonomatch shell variable is set a pattern (or list
of patterns) which matches nothing is left unchanged rather than causing
an error.
The noglob shell variable can be set to prevent filename substitution,
and the expand-glob editor command, normally bound to `^X-*', can be
used to interactively expand individual filename substitutions.
Up
Next
Previous
Wyszukiwarka
Podobne podstrony:
Command, filename and directory stack substitutionfilenameFilenameFiltersubstituted diphenylacetic!0001 HTML FilenamesFileNameMapfilenameFilenameFilterFileNameExtensionFilterfilenamefunction mb substitute characterSMITH, DONIGER sacrifice and substitutionFileNameMapfilenamewięcej podobnych podstron