|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.