What do $? $0 $1 $2 mean in shell script?

BashShellAsh

Bash Problem Overview


I often come across $? $0 $1 $2 etc.... in shell scripting, what I know is that $? returns the exit status of the last command

echo "this will return 0"
echo $?

but what do the others do? what are they called and is there more? perhaps like $3 $4 $5 ...

Bash Solutions


Solution 1 - Bash

These are positional arguments of the script.

Executing

./script.sh Hello World

Will make

$0 = ./script.sh
$1 = Hello
$2 = World

Note

If you execute ./script.sh, $0 will give output ./script.sh but if you execute it with bash script.sh it will give output script.sh.

Solution 2 - Bash

They are called the Positional Parameters.

> 3.4.1 Positional Parameters > > A positional parameter is a parameter denoted by one or more digits, other than the single digit 0. Positional parameters are assigned from the shell’s arguments when it is invoked, and may be reassigned using the set builtin command. Positional parameter N may be referenced as ${N}, or as $N when N consists of a single digit. Positional parameters may not be assigned to with assignment statements. The set and shift builtins are used to set and unset them (see Shell Builtin Commands). The positional parameters are temporarily replaced when a shell function is executed (see Shell Functions). > > When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLinView Question on Stackoverflow
Solution 1 - BashGrzegorz ŻurView Answer on Stackoverflow
Solution 2 - BashEtan ReisnerView Answer on Stackoverflow