Linux shell 特殊变量解析

二次信任 提交于 2020-01-22 00:29:07




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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!