Shell 变量的命名规范和大部分编程语言都一样:
变量名由数字、字母、下划线组成;
必须以字母或者下划线开头;
不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。
但是 shell 有一些特殊变量,并不遵守上面的命名规范。
一、$0
指当前 shell 脚本的文件名。
二、$1~n
传递给 shell 脚本 或者 shell 函数 的参数。
n 是一个数字,表示第几个参数。
例如:
$1 是第1个参数
$2是第2个参数
…
以此类推。
三、$#
传递给 shell 脚本 或者 shell 函数的位置参数的个数。
四、$*
传递给 shelll 脚本 或者 shell 函数的所有参数列表。
这里所有的位置参数都会被看成一个字符串。
五、$@
传递给 shelll 脚本 或者 shell 函数的所有参数列表。
这里每个位置参数会被看做一个独立的字符串。
六、$$
当前 shell 进程的 ID,即 PID(ProcessID)
七、$!
shell 最后运行的后台进程的 PID 。
八、$?
最后运行的命令的结束代码(返回值) ,表示上一次命令是否执行成功:
0 : 表示执行成功,
非0 : 表示执行失败
九、$-
echo $-
himBH
$-
记录了当前设置的 shell 选项,himBH
是其默认值;
关于 himBH
这些字符各自表达的含义,可戳 《 Linux himBH 和 set 命令 》 了解。
十、举个例子
以下结合上面各个参数,简单实现了一个小小的测试脚本:
# test.sh
#!/bin/bash
echo "当前 shell 脚本的文件名是 \$0: $0"
echo "第一个 shell 参数是 \$1: $1"
echo "第二个 shell 参数是 \$2: $2"
echo "第三个 shell 参数是 \$3: $3"
echo "位置参数的总个数是 \$#: $#"
for para in "$*";
do
echo "所有参数 \$*: $para"
done
for param in "$@";
do
echo "参数 \$@: $param"
done
echo "当前 Shell 进程的 PID 为 \$$: $$"
echo "Shell 最后运行的后台进程的 PID 为 \$!:$! "
执行上面的测试脚本,输出如下:
:~> nohup sh test.sh a b c &
当前shell脚本的文件名是 $0: test.sh
第一个shell参数是 $1: a
第二个shell参数是 $2: b
第三个shell参数是 $3: c
位置参数的总个数是 $#: 3
所有参数 $*: a b c
参数 $@: a
参数 $@: b
参数 $@: c
当前 Shell 进程的 PID 为 $$: 24207
Shell 最后运行的后台进程的 PID 为 $!:
:~> echo $!
24207
:~> echo $?
0
:~> echo $-
himBH
来源:CSDN
作者:一得的跋涉
链接:https://blog.csdn.net/weixin_44648216/article/details/104063980