Shell特殊变量

前面已经介绍,变量只能由字母开头,并且只能包含字母,数字,下划线组成。

然而,shell中还有一类变量不符合这种命名规则,这种变量具有特殊含义,被称为特殊变量。shell中常见的特殊变量有 $0,$#,$*,$@,$?,$$和命令行参数。

特殊变量列表

变量 含义
$0 当前脚本的文件名
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本的所有你参数。被""包含时,与$*稍有不同
$n 传递给脚本或函数的参数。n是一个数字,代表第几个参数
$? 上个命令的退出状态或函数的返回值
$$ 当前shell的进程ID,就是脚本的ID。

命令行参数

运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

注意,$0其实可以合并到$n的范围内。因为,执行一个脚本时,命令中的第0个参数即为文件名。如:

./tesh.sh aaa bb

其中,./test.sh即为文件名$0,也即命令中的第0个参数$0。

$*和$@的区别

当$*和$@都不被""包含时,两者功能基本一致,即都以$1,$2,$3...的方式输出。

当$*和$@被""包含时,即"$*"和"$@","$*"会将所有参数当成一个整体,而"$@"依旧会被分割成$1,$2,$3...如我们执行./test.sh "a" "b" "c" "d",并且tesh.sh 中有如下内容:

#!/bin/bash
echo $*    #此处输出"a b c d"
echo $@    #此处输出"a b c d",与$*相同
echo "$*"    #此处输出"a b c d"
echo "$@"    #此处输出"a b c d"
for var in  $*
do
    echo $var
done
#此处输出
#a
#b
#c
#d
for var in $@
do
    echo $var
done
#此处输出同上
for var in "$*"
do
    echo $var
done
#此处输出"a b c d"
#注意两都不同之处在此,"$*"把所有参数合并成一个参数了
for var in "$@"
do
    echo $var
done
#此处输出
#a
#b
#c
#d
#可见,"$@"并没有把所有参数合并成一个参数

退出状态$?

使用$?可以获得上一个命令的退出状态,所谓退出状态即为上一个命令的返回结果。

退出状态在是个数值。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇