Annotation of 43BSDReno/share/doc/usd/04.csh/csh.4, revision 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.