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.
${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 not.
|
$$
|
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 .tcshrc 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. Prevents
further substitution. 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 effect of pathname modifiers if the
aa variable is set as follows:
set aa=(/progs/num.c /book/chap.ps)
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 table, variables that accept values are shown with
the equals sign followed by the type of value they accept; the value
is then described. (Note, however, that variables such as argv, cwd,
and 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, command, 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.
addsuffix
|
Append / to directories and a space
to files during tab completion to indicate a precise match.
|
afsuser
|
Set value to be used instead of the local username for Kerberos
authentication with the autologout
locking feature.
|
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 ".
|
catalog
|
Use tcsh.${catalog} as the filename of the
message catalog. The default is tcsh.
|
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.
|
colorcat
|
Enable color escape sequence for Native Language System (NLS) support
and display NLS messages in color.
|
command
|
If set, hold 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.
|
continue=cmdlist
|
If set to a list of commands, continue those commands instead of
starting new ones.
|
continue_args=cmdlist
|
Like continue, but execute the
following:
echo `pwd` $argv > ~/.cmd_pause; %cmd
|
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, or do neither.
|
edit
|
Enable command-line editor. Set by default for interactive shells.
|
ellipsis
|
For use with prompt variable. Use
... to represent skipped directories.
|
fignore=suffs
|
List of filename suffixes to ignore during filename completion.
|
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|erase}
|
Maintain a record only of unique history events (all), do not enter a new event when it is the
same as the previous one (prev), or
remove an old event that is the same as the new one (erase).
|
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 (see Section 8.4.4 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.
|
killdup={all|prev|erase}
|
Enter only unique strings in the kill ring (all), do not enter new string when it is the
same as the current killed string (prev), or erase from the kill ring an old
string that is the same as the current string (erase).
|
killring=num
|
Set the number of killed strings to keep in memory to
num. The default is 30. If unset or set to a
number less than 2, keep only the most recent killed string.
|
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. If unset, ambiguous is used.
|
nobeep
|
Disable beeping.
|
noclobber
|
Don't redirect output to an existing file; prevents
accidental destruction of files.
|
noding
|
Don't print
"DING!" in prompt time specifiers
when the hour changes.
|
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 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
for formatting information.
|
prompt3='str'
|
String that prompts for interactive input in automatic spelling
correction. See Section 8.4.4 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 for formatting information.
|
shell=file
|
Pathname of the shell program.
|
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 tcsh -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. 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
- %$var
-
The value of the shell or environment variable
var
- %{string%}
-
Include string as a literal escape sequence to
change terminal attributes (but should not move the cursor location);
cannot be the last sequence in the prompt
- \c, ^c
-
Parse c as in the bindkey built-in command
- %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
- %j
-
The number of jobs
- %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 use full
pathnames instead of ~ notation
- %D
-
Day of month (e.g., 09, 10)
- %L
-
Clear from the end of the prompt to the end of the display or the
line.
- %M
-
Fully qualified hostname
- %P
-
Current time, with seconds (24-hour format)
- %R
-
In prompt2, the parser status; in
prompt3, the corrected string; and
in history, the history string
- %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 .tcshrc 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
tcsh maintains a
set of environment
variables, which are distinct from shell
variables and aren't really part of the shell. Shell
variables are meaningful only within the current shell, but
environment variables are exported automatically, making them
available globally. For example, 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 tcsh shell variables. When either one changes,
the value is copied to the other.
- AFSUSER
-
Alternative to local user for Kerberos authentication with autologout locking; same as afsuser.
- 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:
- 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.
- LS_COLORS
-
Colors for use with the ls command.
See the tcsh manpage for detailed
information.
- MACHTYPE
-
Type of machine.
- MAIL
-
The file that holds mail. Used by mail programs. This is not the same
as the shell variable mail, 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
-
System vendor.
- VISUAL
-
Pathname to default full-screen editor. See also EDITOR.
|