In the Bourne shell, there is a seldom-used option '-k
' which automatically places any values specified as name=value
on the command line into the environment. Of course, the Bourne/Korn/POSIX shell family (including bash) also do that for name=value
items before the command name:
name1=value1 name2=value2 command name3=value3 -x name4=value4 abc
Under normal POSIX-shell behaviour, the command
is invoked with name1
and name2
in the environment, and with four arguments. Under the Bourne (and Korn and bash, but not POSIX) shell -k
option, it is invoked with name1
, name2
, name3
, and name4
in the environment and just two arguments. The bash
manual page (as in man bash
) doesn't mention the equivalent of -k
but it works like the Bourne and Korn shells do.
I don't think I've ever used it (the -k
option) seriously.
There is no way to tell from within the script (command
) that the environment variables were specified solely for this command; they are simply environment variables in the environment of that script.
This is the closest approach I know of to what you are asking for. I do not think anything equivalent exists for the C shell family. I don't know of any other argument parser that sets variables from name=value
pairs on the command line.
With some fairly major caveats (it is relatively easy to do for simple values, but hard to deal with values containing shell meta-characters), you can do:
case $1 in
(*=*) eval $1;;
esac
This is not the C shell family. The eval
effectively does the shell assignment.
arg=name1=value1
echo $name1
eval $arg
echo $name1