3

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.

1

1 Answer 1

3

$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

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.