Annotation of 43BSDReno/share/doc/usd/04.csh/csh.4, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1980 Regents of the University of California.
                      2: .\" All rights reserved.  The Berkeley software License Agreement
                      3: .\" specifies the terms and conditions for redistribution.
                      4: .\"
                      5: .\"    @(#)csh.4       6.1 (Berkeley) 5/23/86
                      6: .\"
                      7: .nr H1 3
                      8: .NH
                      9: Other, less commonly used, shell features
                     10: .NH 2
                     11: Loops at the terminal; variables as vectors
                     12: .PP
                     13: It is occasionally useful to use the
                     14: .I foreach
                     15: control structure at the terminal to aid in performing a number
                     16: of similar commands.
                     17: For instance, there were at one point three shells in use on the Cory \s-2UNIX\s0
                     18: system at Cory Hall,
                     19: `/bin/sh',
                     20: `/bin/nsh',
                     21: and
                     22: `/bin/csh'.
                     23: To count the number of persons using each shell one could have issued
                     24: the commands
                     25: .DS
                     26: % grep \-c csh$ /etc/passwd
                     27: 27
                     28: % grep \-c nsh$ /etc/passwd
                     29: 128
                     30: % grep \-c \-v sh$ /etc/passwd
                     31: 430
                     32: %
                     33: .DE
                     34: Since these commands are very similar we can use
                     35: .I foreach
                     36: to do this more easily.
                     37: .DS
                     38: % foreach i (\'sh$\' \'csh$\' \'\-v sh$\')
                     39: ? grep \-c $i /etc/passwd
                     40: ? end
                     41: 27
                     42: 128
                     43: 430
                     44: %
                     45: .DE
                     46: Note here that the shell prompts for
                     47: input with `? ' when reading the body of the loop.
                     48: .PP
                     49: Very useful with loops are variables which contain lists of filenames
                     50: or other words.
                     51: You can, for example, do
                     52: .DS
                     53: % set a=(\`ls\`)
                     54: % echo $a
                     55: csh.n csh.rm
                     56: % ls
                     57: csh.n
                     58: csh.rm
                     59: % echo $#a
                     60: 2
                     61: %
                     62: .DE
                     63: The
                     64: .I set
                     65: command here gave the variable
                     66: .I a
                     67: a list of all the filenames in the current directory as value.
                     68: We can then iterate over these names to perform any chosen function.
                     69: .PP
                     70: The output of a command within `\`' characters is converted by
                     71: the shell to a list of words.
                     72: You can also place the `\`' quoted string within `"' characters
                     73: to take each (non-empty) line as a component of the variable;
                     74: preventing the lines from being split into words at blanks and tabs.
                     75: A modifier `:x' exists which can be used later to expand each component
                     76: of the variable into another variable splitting it into separate words
                     77: at embedded blanks and tabs.
                     78: .NH 2
                     79: Braces { ... } in argument expansion
                     80: .PP
                     81: Another form of filename expansion, alluded
                     82: to before involves the characters `{' and `}'.
                     83: These characters specify that the contained strings, separated by `,'
                     84: are to be consecutively substituted into the containing characters
                     85: and the results expanded left to right.
                     86: Thus
                     87: .DS
                     88: A{str1,str2,...strn}B
                     89: .DE
                     90: expands to
                     91: .DS
                     92: Astr1B Astr2B ... AstrnB
                     93: .DE
                     94: This expansion occurs before the other filename expansions, and may
                     95: be applied recursively (i.e. nested).
                     96: The results of each expanded string are sorted separately, left
                     97: to right order being preserved.
                     98: The resulting filenames are not required to exist if no other expansion
                     99: mechanisms are used.
                    100: This means that this mechanism can be used to generate arguments which are
                    101: not filenames, but which have common parts.
                    102: .PP
                    103: A typical use of this would be
                    104: .DS
                    105: mkdir ~/{hdrs,retrofit,csh}
                    106: .DE
                    107: to make subdirectories `hdrs', `retrofit' and `csh'
                    108: in your home directory.
                    109: This mechanism is most useful when the common prefix is longer
                    110: than in this example, i.e.
                    111: .DS
                    112: chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
                    113: .DE
                    114: .NH 2
                    115: Command substitution
                    116: .PP
                    117: A command enclosed in `\`' characters is replaced, just before
                    118: filenames are expanded, by the output from that command.
                    119: Thus it is possible to do
                    120: .DS
                    121: set pwd=\`pwd\`
                    122: .DE
                    123: to save the current directory in the variable
                    124: .I pwd
                    125: or to do
                    126: .DS
                    127: ex \`grep \-l TRACE *.c\`
                    128: .DE
                    129: to run the editor
                    130: .I ex
                    131: supplying as arguments those files whose names end in `.c'
                    132: which have the string `TRACE' in them.*
                    133: .FS
                    134: *Command expansion also occurs in input redirected with `<<'
                    135: and within `"' quotations.
                    136: Refer to the shell manual section for full details.
                    137: .FE
                    138: .NH 2
                    139: Other details not covered here
                    140: .PP
                    141: In particular circumstances it may be necessary to know the exact
                    142: nature and order of different substitutions performed by the shell.
                    143: The exact meaning of certain combinations of quotations is also
                    144: occasionally important.
                    145: These are detailed fully in its manual section.
                    146: .PP
                    147: The shell has a number of command line option flags mostly of use
                    148: in writing \s-2UNIX\s0 programs,
                    149: and debugging shell scripts.
                    150: See the csh(1) manual section for a list of these options.
                    151: .bp

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.