Reputation: 1665
While brushing up on bash (it's been a while), I was surprised to notice that executing this code, saved as script.sh:
echo "Arg 0 to script.sh: $0"
echo "Arg 1 to script.sh: $1"
function echo_args
{
echo "Arg 0 to echo_args: $0"
echo "Arg 1 to echo_args: $1"
}
echo_args
like this:
>> ./script.sh argument
output this:
Arg 0 to script.sh: ./script.sh
Arg 1 to script.sh: argument
Arg 0 to echo_args: ./script.sh
Arg 1 to echo_args:
I was surprised to see that $0 of script.sh was passed as $0 to echo_args when $1 is not treated similarly. It seems to me it should be both or neither.
Any clarification is appreciated.
Upvotes: 3
Views: 1141
Reputation: 865
$0 is a "Special Parameter" in bash, which always evaluates to the name of the script, and is set at the start of the script. It looks like this also means it's somewhat global, since it can't be reassigned.
For more information, this is a pretty good reference:
http://bash.cyberciti.biz/guide/$0
Upvotes: 3