De https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
$# Se expande al número de parámetros posicionales en decimal.
$? Se expande al estado de salida de la canalización en primer plano ejecutada más recientemente.
De Learn Bash en Y minutos:
# Builtin variables:
# There are some useful builtin variables, like
echo "Last program's return value: $?"
echo "Script's PID: $$"
echo "Number of arguments passed to script: $#"
echo "All arguments passed to script: example@unixlinux.online"
echo "The script's name: $0"
echo "Script's arguments separated into different variables: $1 $2..."
$# muestra el número de argumentos del script$? muestra el valor de retorno del último script
sobre argumentos:echo "ARG[$#]" antes de if y luego ejecute el script como
script.sh 1
la salida será
ARG[1]
Usage: g old-pattern new-pattern filename
y así sucesivamente
la salida de $? también podría usarse en la línea de comando:
#shell>ls
file1.txt g inpu nodes_list
#shell>echo $?
0
#shell>ls FileNameNotFound
ls: FileNameNotFound: No such file or directory
#shell> echo $?
1