Linux 之 Shell 特殊变量详解
Shell
特殊变量: $0
,$n
,$!
,$@
,$#
,$$
,$*
,$-
,$?
.
试验平台:
CentOS Linux release 7.6.1810
特殊变量列表
变量 | 含义 |
---|---|
$0 | 运行的当前脚本文件名;需要注意的如果入参超过 10 个(包含 10),需要使用 ${10} 这种形式 |
$n | 传递给脚本或函数的入参; n 是一个数字,例如,第一个参数是 $1,第二个参数是 $2 |
$! | Shell 最后运行的后台的 PID |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到 |
$# | 传递给脚本或函数的参数个数 |
$$ | 当前 bash 的进程号,对于 Shell 脚本,就是这些脚本所在的进程 ID |
$* | 传递给脚本或函数的所有参数 |
$- | 使用 Set 命令设定的内容 |
$? | 上个命令运行的退出状态,或函数的返回值 |
1.效果
$ cat a.sh
#!/bin/bash
echo "脚本名:$0"
echo "第一个入参:$1"
echo "第二个入参:$2"
echo "引用的全部参数:$@"
echo "应用入参的个数:$#"
echo "当前进程ID:$$"
echo "引用的全部参数:$*"
echo "运行是否成功 0|n :$?"
执行结果如下:
$ sh a.sh a1 a2 a4 a5
脚本名:a.sh
第一个入参:a1
第二个入参:a2
引用的全部参数:a1 a2 a4 a5
应用入参的个数:4
当前进程ID:7652
引用的全部参数:a1 a2 a4 a5
运行是否成功 0|n :0
2.$n
n
为 10
的情况
需要注意的是$10 不能获取第十个参数,获取第十个参数需要 ${10}
。当 n>=10
时,需要使用 ${n} 来获取参数
$ cat b.sh
#!/bin/bash
num(){
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "不带大括号: $10"
echo "第十个参数: ${10}"
echo "num11 ${11}"
echo "参数个数: $#"
echo "传递给函数的所有参数: $*"
}
num 1 2 3 4 5 6 7 8 9 10 111 222 333
执行结果如下:
$ sh b.sh
第一个参数: 1
第二个参数: 2
不带大括号: 10
第十个参数: 10
num11 111
参数个数: 13
传递给函数的所有参数: 1 2 3 4 5 6 7 8 9 10 111 222 333
3.$*
和 $@
的区别
$*
和 $@
都表示传递给函数或脚本的所有参数,不被双引号 (" ")
包含时,都以 "$1" "$2" … "$n"
的形式输出所有参数。但是当它们被双引号 (" ")
包含时,"$*"
会将所有的参数作为一个整体,以 "$1 $2 … $n"
的形式输出所有参数;"$@"
会将各个参数分开,以 "$1" "$2" … "$n"
的形式输出所有参数。
$ cat c.sh
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
#echo "print each param from \"\$*\""
echo "print each param from '$*'"
for var in "$*"
do
echo "$var"
done
#echo "print each param from \"\$@\""
echo "print each param from '$@'"
for var in "$@"
do
echo "$var"
done
执行结果如下:
$ sh c.sh a b c d
$*= a b c d
"$*"= a b c d
$@= a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from 'a b c d'
a b c d
print each param from 'a b c d'
a
b
c
d
4.退出状态与返回值
$?
可以获取上一个命令的退出状态。就是查看其运行是否有报错
$ sh d.sh
echo "Hello World!"
echo $?
0
$?
也可以表示函数的返回值
$ cat e.sh
#/bin/bash
function num()
{
echo $1,$2;
return $(($1+$2));
}
num 5 7;
total=$(num 3 2);
echo $total,$?;
执行的结果如下:
$ sh return.sh
5,7
3,2,5
``
注:需要注意的是无法使用 `aa=$?` 这样的用法调用返回值,使用 `echo $aa` 输出会是空。
---
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1163 0 2020-12-10
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353269 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...