1. $ 0, $ 1, $ 2, ..., $ n
$ 0 : este ponto especial indica o nome do próprio comando.
$ 1 indica o primeiro parâmetro.
$ 2 : indica o segundo parâmetro.
$ N : indica o enésimo parâmetro.
[root@localhost shell]# cat test01.sh
echo $0
echo $1
echo $2
[root@localhost shell]# ./test01.sh Hello World
./test01.sh
Hello
World
[root@localhost shell]# bash test01.sh Hello World
test01.sh
Hello
World
Dois, $ #
$ # : Representa o número real de parâmetros
[root@localhost shell]# cat test02.sh
echo "length is " $#
[root@localhost shell]#bash test02.sh 1 2 aa bb
length is 4
Três, $$
$$ : representa o pid do processo atual
[root@localhost shell]# cat test03.sh
echo "my pid is " $$
[root@localhost shell]# bash test03.sh
my pid is 47282
[root@localhost shell]# echo $$
46946
Quatro, $?
$ ?: Indica o status de saída da execução do comando anterior ( 0 significa nenhum erro, outro significa que há um erro )
[root@localhost shell]# cat test.sh
exit 66
[root@localhost shell]# ./test.sh
[root@localhost shell]# echo $?
66
Cinco, $!
$ !: Representa o pid do programa de execução em segundo plano mais recente
[root@localhost shell]# sleep 60 &
[1] 47395
[root@localhost shell]# sleep 70 &
[2] 47396
[root@localhost shell]# echo $!
47396
Seis, outro
$
-Lista de sinalizadores definidos com o comando Set.
$ * Lista de
todos os parâmetros. Se "$ *" estiver entre "" ", todos os parâmetros serão exibidos na forma de" $ 1 $ 2… $ n ".
$ @
All lista de parâmetros. Se "$ @" estiver entre "" ", todos os parâmetros serão exibidos na forma de" $ 1 "" $ 2 "…" $ n ".
A diferença entre $ * e $ @:
- O mesmo ponto: todos os parâmetros estão entre aspas.
- Diferença: refletida apenas em aspas duplas. Supondo que três parâmetros 1, 2, 3 são escritos quando o script está em execução, "*" é equivalente a "1 2 3" (um parâmetro é passado) e "@" é equivalente a "1" "2" "3 "(Três parâmetros são passados).
Sete, resumo
vim test.sh
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo ' -----$*'
for i in "$*"; do
echo $i
done
echo ' -----$@'
for i in "$@"; do
echo $i
done
echo "PID:$$"
bash test.sh aa bb cc
Link de referência: https://www.runoob.com/linux/linux-shell-passing-arguments.html