¿Qué cuesta $? $ 0 $ 1 $ 2 significa en el script de shell?

A menudo me encuentro con $? $0 $1 $2 etc.... $? $0 $1 $2 etc.... en scripts de shell, lo que sé es que $? devuelve el estado de salida del último comando

 echo "this will return 0" echo $? 

pero, ¿qué hacen los otros? ¿cómo se llaman y hay más? tal vez como $ 3 $ 4 $ 5 …

Estos son argumentos posicionales del guion.

Ejecutando

 ./script.sh Hello World 

Hará

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

Se llaman Parámetros Posicionales .

3.4.1 Parámetros posicionales

Un parámetro posicional es un parámetro denotado por uno o más dígitos, distintos del dígito simple 0. Los parámetros posicionales se asignan desde los argumentos del intérprete de comandos cuando se invoca, y pueden reasignarse utilizando el comando integrado del conjunto. El parámetro posicional N se puede hacer referencia como $ {N}, o como $ N cuando N consiste en un solo dígito. Los parámetros posicionales no pueden asignarse a las declaraciones de asignación. Los builtins de set y shift se usan para configurarlos y desarmarlos (ver Comandos Builtin de Shell). Los parámetros posicionales se reemplazan temporalmente cuando se ejecuta una función de shell (ver Funciones de Shell).

Cuando un parámetro posicional que consiste en más de un dígito se expande, debe estar entre llaves.