8.4. Variables
This subsection describes the following:
8.4.1. Variable Substitution
In the following substitutions, braces ({}) are optional,
except when needed to separate a variable name from following characters
that would otherwise be considered part of the name:
Variable |
Description |
${var} |
The value of variable var. |
${var[i]} |
Select word or words in position i of var.
i can be a single number, a range m-n,
a range -n (missing m implies 1),
a range m- (missing n
implies all remaining words),
or * (select all words). i
also can be a variable that expands to one of these values.
|
${#var} |
The number of words in var. |
${#argv} |
The number of arguments. |
$0 |
Name of the program. |
${argv[n]} |
Individual arguments on command line (positional parameters); 1
n 9.
|
${n} |
Same as ${argv[n]}.
|
${argv[*]} |
All arguments on command line. |
$* |
Same as {$argv[*]}. |
$argv[$#argv] |
The last argument. |
${?var} |
Return 1 if var is set, 0 if var is not set.
|
$$ |
Process number of current shell; useful as part of a filename
for creating temporary files with unique names.
|
${?name} |
Return 1 if name is set, 0 if not. |
$?0 |
Return 1 if input filename is known, 0 if not. |
8.4.1.1. Examples
Sort the third through last arguments
and save the output in a file whose name is unique to this process:
sort $argv[3-] > tmp.$$
Process .cshrc commands only if the shell is interactive
(i.e., the prompt variable must be set):
if ($?prompt) then
set commands,
alias commands,
etc.
endif
8.4.2. Variable Modifiers
Except for $?var, $$, and $?0,
the variable substitutions in the preceding section
may be followed by one of these
modifiers (when braces are used, the modifier goes inside them):
- :r
Return the variable's root (the portion before the last dot).
- :e
Return the variable's extension.
- :h
Return the variable's header (the directory portion).
- :t
Return the variable's tail (the portion after the last slash).
- :gr
Return all roots.
- :ge
Return all extensions.
- :gh
Return all headers.
- :gt
Return all tails.
- :q
Quote a wordlist variable, keeping the items separate. Useful when the variable contains filename metacharacters that should
not be expanded.
- :x
Quote a pattern, expanding it into a wordlist.
8.4.2.1. Examples using pathname modifiers
The following table shows the use of pathname modifiers on the
following
variable:
set aa=(/progs/num.c /book/chap.ps)
Variable Portion |
Specification |
Output Result
|
Normal variable |
echo $aa |
/progs/num.c /book/chap.ps |
Second root |
echo $aa[2]:r |
/book/chap |
Second header |
echo $aa[2]:h |
/book |
Second tail |
echo $aa[2]:t |
chap.ps |
Second extension |
echo $aa[2]:e |
ps |
Root |
echo $aa:r |
/progs/num /book/chap.ps |
Global root |
echo $aa:gr |
/progs/num /book/chap |
Header |
echo $aa:h |
/progs /book/chap.ps |
Global header |
echo $aa:gh |
/progs /book |
Tail |
echo $aa:t |
num.c /book/chap.ps |
Global tail |
echo $aa:gt |
num.c chap.ps |
Extension |
echo $aa:e |
c /book/chap.ps |
Global extension |
echo $aa:ge |
c ps |
8.4.2.2. Examples using quoting modifiers
Unless quoted, the shell expands variables to represent files in the current
directory:
% set a="[a-z]*" A="[A-Z]*"
% echo "$a" "$A"
[a-z]* [A-Z]*
% echo $a $A
at cc m4 Book Doc
% echo $a:x $A
[a-z]* Book Doc
% set d=($a:q $A:q)
% echo $d
at cc m4 Book Doc
% echo $d:q
[a-z]* [A-Z]*
% echo $d[1] +++ $d[2]
at cc m4 +++ Book Doc
% echo $d[1]:q
[a-z]*
8.4.3. Predefined Shell Variables
Variables can be set in one of two ways, by assigning a value:
set var=value
or by simply turning the variable on:
set var
In the following list, variables that accept values are shown
with the equals sign followed by the type of value they accept;
the value then is described. (Note, however, that variables
such as argv, cwd, or status are never explicitly assigned.)
For variables that are turned on
or off, the table describes what they do when set.
tcsh automatically sets (and,
in some cases, updates) the variables
addsuffix,
argv,
autologout,
cwd,
dirstack,
echo-style,
edit,
gid,
home,
loginsh,
logout,
oid,
owd,
path,
prompt,
prompt2,
prompt3,
shell,
shlvl,
status,
tcsh,
term,
tty,
uid,
user, and
version. Variables in italics are
specific to tcsh.
Variable |
Description |
addsuffix |
Append / to directories and a space to files during tab completion
to indicate a precise match.
|
ampm |
Display all times in 12-hour format. |
argv=(args) |
List of arguments passed to current command; default is ().
|
autocorrect |
Check spelling before attempting to complete commands.
|
autoexpand |
Expand history (such as ! references) during command completion.
|
autolist[=ambiguous] |
Print possible completions when correct one is ambiguous. If
ambiguous is specified, print possible
completions only when completion adds no new characters.
|
autologout=logout-minutes [locking-minutes] |
Log out after logout-minutes of idle time.
Lock the terminal after locking-minutes of idle time,
requiring a password before continuing. Not used if the DISPLAY environment variable is set.
|
backslash_quote |
Always allow backslashes to quote \, ', and <">. |
cdpath=dirs |
List of alternate directories to search when locating arguments for
cd, popd, or pushd.
|
color |
Turn on color for ls-F, ls, or
both. Setting to nothing is equivalent to setting for both. |
command |
If set, holds the command passed to the shell with the -c option. |
complete=enhance |
When enhance, ignore case in completion,
treat ., -, and _ as word separators, and consider _ and - to be the same.
|
correct={cmd|complete|all} |
When cmd, spellcheck commands.
When complete, complete commands.
When all, spellcheck whole command line.
|
cwd=dir |
Full pathname of current directory. |
dextract |
When set, the pushd command extracts the desired
directory and puts it at the top of the stack, instead of rotating the
stack. |
dirsfile=file |
History file consulted by dirs -S
and dirs -L. Default is ~/.cshdirs.
|
dirstack |
Directory stack, in array format. dirstack[0]
is always equivalent to
cwd. The other elements can be artificially changed.
|
dspmbyte=code |
Enable use of multibyte code; for use with Kanji. See the
tcsh manpage for details. |
dunique |
Make sure that each directory exists only once in the stack.
|
echo |
Redisplay each command line before execution; same as
csh -x command.
|
echo_style={bsd|sysv|both|none} |
Don't echo a newline with -n option (bsd) |
parse escaped characters (sysv) |
do both | do neither.
|
edit |
Enable command-line editor. |
ellipsis |
For use with prompt variable. Represent skipped directories
with ....
|
fignore=chars |
List of filename suffixes to ignore during
filename completion (see filec).
|
filec |
If set, a filename that is partially typed on the command line
can be expanded to its full name when Esc is pressed.
If more than one filename would match, type EOF
to list possible completions. Ignored in tcsh.
|
gid |
User's group ID. |
group |
User's group name. |
histchars=ab |
A two-character
string that sets the characters to use in history-substitution and
quick-
substitution (default is !^).
|
histdup={all|prev} |
Maintain a record only of unique history events (all), or
do not enter new event when it is the same as the previous one (prev).
|
histfile=file |
History file consulted by history -S and
history -L. Default is ~/.history.
|
histlit |
Do not expand history lines when recalling them.
|
history=n format |
The first word indicates the number of commands to save in the history list.
The second indicates the format with which to display that list
(tcsh only;
see the prompt section for possible formats).
|
home=dir |
Home directory of user, initialized from HOME.
The ~ character is shorthand for this value.
|
ignoreeof |
Ignore an end-of-file (EOF) from terminals;
prevents accidental logout.
|
implicitcd |
If directory name is entered as a command, cd to
that directory. Can be set to verbose to echo
the cd to standard output. |
inputmode={insert|overwrite} |
Control editor's mode. |
listflags=flags |
One or more of the x, a, or
A options for the ls-F built-in command.
Second word can be set to path for ls command. |
listjobs=long |
When a job is suspended, list all jobs (in long format, if specified).
|
listlinks |
In ls -F command, include type of file to which links point.
|
listmax=num |
Do not allow list-choices to print more than num
choices before prompting.
|
listmaxrows=num |
Do not allow list-choices to print more than num rows of
choices before prompting.
|
loginsh |
Set if shell is a login shell. |
logout |
Indicates status of an imminent logout
(normal,
automatic, or
hangup).
|
mail=(n files) |
One or more files checked for new mail every 5 minutes or
(if n is supplied) every n seconds.
|
matchbeep={never|nomatch|ambiguous|notunique} |
Specifies circumstances under which completion should beep: never,
if no match exists, if multiple matches exist, or if multiple
matches exist and one is exact.
|
nobeep |
Disable beeping. |
noclobber |
Don't redirect output to an existing file; prevents accidental
destruction of files.
|
noglob |
Turn off filename expansion; useful in shell scripts.
|
nokanji |
Disable Kanji (if supported). |
nonomatch |
Treat filename metacharacters as literal characters, if no match exists (e.g., vi ch* creates new file ch* instead of printing "No match").
|
nostat=directory-list |
Do not stat directory-list during completion. |
notify |
Declare job completions when they occur. |
owd |
Old working directory. |
path=(dirs) |
List of pathnames in which to search for commands to execute.
Initialized from PATH; the default is:
. /usr/ucb /usr/bin
|
printexitvalue |
Print all nonzero exit values. |
prompt='str' |
String that prompts for interactive input; default is %.
See Section 8.4.4, "Formatting for the Prompt Variable" later in this chapter for formatting information.
|
prompt2='str' |
String that prompts for interactive input in foreach and while loops
and continued lines (those with escaped newlines).
See Section 8.4.4, "Formatting for the Prompt Variable" for formatting information.
|
prompt3='str' |
String that prompts for interactive input in automatic spelling correction.
See Section 8.4.4, "Formatting for the Prompt Variable" for formatting information.
|
promptchars=cc |
Use the two characters specified as cc with the
%#
prompt sequence to indicate normal users and the superuser,
respectively. |
pushdsilent |
Do not print directory stack when pushd and
popd are invoked.
|
pushdtohome |
Change to home directory when pushd is invoked
without arguments.
|
recexact |
Consider completion to be concluded on first exact match.
|
recognize_only_executables |
When command completion is invoked, print only executable files.
|
rmstar |
Prompt before executing the command rm *. |
rprompt=string |
The string to print on the right side of the screen while the prompt is displayed on
the left. Specify as for prompt. |
savedirs |
Execute dirs -S before exiting. |
savehist=max [merge] |
Execute history -S before exiting.
Save no more than max lines of history.
If specified, merge those lines with previous history saves, and sort by time.
|
sched=string |
Format for sched's printing of events.
See Section 8.4.4, "Formatting for the Prompt Variable" for formatting information.
|
shell=file |
Pathname of the shell program currently in use; default is /bin/csh.
|
shlvl |
Number of nested shells. |
status=n |
Exit status of last command. Built-in commands return
0 (success) or 1 (failure). |
symlinks= {chase|ignore|expand} |
Specify manner in which to deal with symbolic links.
Expand them to real directory name in cwd (chase),
treat them as real directories (ignore), or
expand arguments that resemble pathnames (expand).
|
tcsh |
Version of tcsh. |
term |
Terminal type. |
time='n %c' |
If command execution takes more than n CPU seconds,
report user time, system time, elapsed time, and CPU percentage.
Supply optional %c flags to show other data.
|
tperiod |
Number of minutes between executions of periodic alias.
|
tty |
Name of tty, if applicable. |
uid |
User ID. |
user |
Username. |
verbose |
Display a command after history substitution; same as the
command csh -v.
|
version |
Shell's version and additional information, including options set at
compile time.
|
visiblebell |
Flash screen instead of beeping.
|
watch=([n] user terminal...) |
Watch for user logging in at terminal, where terminal
can be a tty name or any. Check every n minutes or 10 by
default.
|
who=string |
Specify information to be printed by watch.
|
wordchars=chars |
List of all nonalphanumeric characters that may be part of a word.
Default is *?_-.[]~=. |
8.4.4. Formatting for the Prompt Variable
tcsh provides a list of substitutions that can be used in formatting
the prompt. (csh allows only plain-string prompts and the ! history
substitution shown in the following list.) The list of
available substitutions includes:
- %%
Literal %
- %/
The present working directory
- %~
The present working directory, in ~ notation
- %#
# for the superuser, > for others
- %?
Previous command's exit status
- %b
End boldfacing
- %c[[0]n], %.[[0]n]
The last n (default 1) components of the present working directory; if 0 is specified, replace removed components with /<skipped>
- %d
Day of the week (e.g., Mon, Tue)
- %h, %!, !
Number of current history event
- %l
Current tty
- %m
First component of hostname
- %n
Username
- %p
Current time, with seconds (12-hour mode)
- %s
End standout mode (reverse video)
- %t, %@
Current time (12-hour format)
- %u
End underlining
- %w
Month (e.g., Jan, Feb)
- %y
Year (e.g., 99, 00)
- %B
Begin boldfacing
- %C
Similar to %c, but uses full pathnames instead of ~ notation
- %D
Day of month (e.g., 09, 10)
- %M
Fully qualified hostname
- %P
Current time, with seconds (24-hour format)
- %S
Begin standout mode (reverse video)
- %T
Current time (24-hour format)
- %U
Begin underlining
- %W
Month (e.g., 09, 10)
- %Y
Year (e.g., 1999, 2000)
8.4.5. Sample .cshrc File
# PREDEFINED VARIABLES
set path=(~ ~/bin /usr/ucb /bin /usr/bin . )
set mail=(/usr/mail/tom)
if ($?prompt) then # settings for interactive use
set echo
set noclobber ignoreeof
set cdpath=(/usr/lib /usr/spool/uucp)
# Now I can type cd macros
# instead of cd /usr/lib/macros
set history=100
set prompt='tom \!% ' # includes history number
set time=3
# MY VARIABLES
set man1="/usr/man/man1" # lets me do cd $man1, ls $man1
set a="[a-z]*" # lets me do vi $a
set A="[A-Z]*" # or grep string $A
# ALIASES
alias c "clear; dirs" # use quotes to protect ; or |
alias h "history|more"
alias j jobs -l
alias ls ls -sFC # redefine ls command
alias del 'mv \!* ~/tmp_dir' # a safe alternative to rm
endif
8.4.6. Environment Variables
The C shell maintains a set of environment variables,
which are distinct from shell variables and aren't really part of
the C shell.
Shell variables are meaningful only within the current shell, but
environment variables are exported automatically,
making them available globally.
For example, C-shell variables are accessible
only to a particular script in which they're defined, whereas
environment variables can be used
by any shell scripts, mail utilities, or editors you might invoke.
Environment variables are assigned as follows:
setenv VAR value
By convention, environment variable names are all uppercase.
You can create your own environment variables,
or you can use the predefined environment variables that follow.
The following environment variables have corresponding C-shell variables.
When either one changes, the value is copied to the other (italics means the variable is
specific to tcsh):
- GROUP
User's group name; same as group.
- HOME
Home directory; same as home.
- PATH
Search path for commands; same as path.
- SHLVL
Number of nested shell levels; same as shlvl.
- TERM
Terminal type; same as term.
- USER
User's login name; same as user.
Other environment variables, which do not have corresponding shell variables,
include the following (italics means the variable is specific to
tcsh):
- COLUMNS
Number of columns on terminal.
- DISPLAY
Identifies user's display for the X Window System. If set, the
shell doesn't set autologout.
- EDITOR
Pathname to default editor. See also VISUAL.
- HOST
Name of machine.
- HOSTTYPE
Type of machine. Obsolete; will be removed eventually.
- HPATH
Colon-separated list of directories to search for documentation.
- LANG
Preferred language. Used for native language support.
- LC_CTYPE
The locale, as it affects character handling. Used for native
language support.
- LINES
Number of lines on the screen.
- LOGNAME
Another name for the USER variable.
- MACHTYPE
Type of machine.
- MAIL
The file that holds mail. Used by mail programs. This is not the
same as the C-shell mail variable,
which only checks for new mail.
- NOREBIND
Printable characters not rebound. Used for native language
support.
- OSTYPE
Operating system.
- PWD
The current directory; the value is copied from cwd.
- REMOTEHOST
Machine name of remote host.
- SHELL
Undefined by default; once initialized to shell,
the two are identical.
- TERMCAP
The file that holds the cursor-positioning codes for your terminal type.
Default is /etc/termcap.
- VENDOR
The system vendor.
- VISUAL
Pathname to default full-screen editor. See also EDITOR.
| | | 8.3. Syntax | | 8.5. Expressions |
Copyright © 2001 O'Reilly & Associates. All rights reserved.
|