Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: emulate -L sh impact on $0, $argv
On Jan 31, 8:13pm, Sebastian Gniazdowski wrote:
}
} In sh argv[0] is the same as argv[1]? Because again, you say I
} shouldn't be able to use argv[0] without KSH_ARRAYS, but in the
} examples, I do
This is a side-effect KSH_ARRAYS combined with the behavior of
$argv / $* / $@ when in the "source" command. Doc of "." command:
If any arguments ARG are given, they become the positional
parameters; the old positional parameters are restored when the
FILE is done executing.
What's left unsaid there is that if NO arguments are given, then the
positional parameters REMAIN THOSE OF THE CALLING CONTEXT. So argv[0]
in your example is not test_file.sh's $0, it's the "source" FUNCTION's
$argv[1].
If you change your example to:
echo 'echo 0 is $0, argv0 is ${argv[0]}, argv1 is ${argv[1]}' > test_file.sh;
source ./test_file.sh ARGUMENT
Then the zsh case
source() { emulate -L zsh; builtin source "$@"; }
will give
0 is ./test_file.sh, argv0 is , argv1 is ARGUMENT
whereas the sh case
source() { emulate -L sh; builtin source "$@"; }
yields
0 is source, argv0 is ARGUMENT, argv1 is
With KSH_ARRAYS set, $argv[0] == $1, $argv[1] == $2, etc.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author