[Most of this article, except 
IFS
 and 
--
, also applies to the C shell. -JP]
The Bourne shell command line can have options like -e (exit if any command returns non-zero status). It can also have other arguments; these are passed to shell scripts. You can set new command-line parameters while you're typing interactive commands (at a shell prompt) or in a shell script.
To reset the command-line parameters, just type set followed by the new parameters. So, for example, to ask the shell to show expanded versions of command lines after you type them, set the -v (verbose) option ( 8.17 ) :
$set -v$mail $group1 < messagemail andy ellen heather steve wilma < message $mail $group2 < messagemail [email protected] [email protected] [email protected] < message $set +v
Typing 
set +v
 cancels the 
v
 option on many Bourne shells.
You can put filenames or any other strings in the command-line parameters interactively or from a shell script. That's handy for storing and parsing the output of a UNIX command with 
backquotes (
9.16
)
. For example, you can get a list of all logged-in users from the parameters 
$1
, 
$2
, and so on. Use 
users
 if your system has it. Otherwise, use 
who
 (
51.4
)
- and 
cut
 (
35.14
)
 to strip off everything but the usernames:
| for | $ | 
|---|
You can save the original parameters in another variable and reset them later:
oldparms="$*" setsomething new...use new settings... set $oldparms
If the first parameter you 
set
 starts with a dash, like 
-e
, the shell will treat it as its own option instead of as a string to put into the command-line parameters.
 To avoid this, use 
--
 (two dashes) as the first argument to 
set
. In this example, 
$1
 gets 
-e
, and the filenames expanded from the wildcard pattern go into 
$2
, 
$3
, etc.:
set -- -e file*
Because the shell parses and scans the new parameters before it stores them, wildcards ( 15.2 ) and other special characters ( 8.19 ) will be interpreted - watch your quoting ( 8.14 ) . You can take advantage of this to parse lines of text into pieces that aren't separated with the usual spaces and TABs - for instance, a line from a database with colon-separated fields - by setting the IFS ( 35.21 ) variable before the set command.
If you want to save any special quoting on the original command line, be careful; the quoting will be lost unless you're clever. For example, if 
$1
 used to be 
John Smith
,  it'll be split after it's restored: 
$1
 will have 
John
 and 
$2
 will be 
Smith
. A better  solution might be to use a 
subshell (
13.7
)
 for the part of the script where you need to reset the command-line parameters:
# reset command-line parameters during subshell only: (setsome new parameters... do something with new parameters ... ) # original parameters aren't affected from here on...
One last note: 
set
 won't set 
$0
, the name of the script file.
-