Schemer
Schemer

Reputation: 1665

Passing command line arguments through Bash

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

Answers (1)

Jordan Robinson
Jordan Robinson

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

Related Questions