和命令行参数,Shell特殊变量

By admin in 美高梅手机版4858 on 2019年4月21日

新鲜变量列表

变量     含义
$0      当前剧本的文书名
$n      传递给脚本或函数的参数。n
是1个数字,表示第多少个参数。举例,第二个参数是$一,第一个参数是$贰。
$#      传递给脚本或函数的参数个数。
$*      传递给脚本或函数的装有参数。
$@       传递给脚本或函数的全数参数。被双引号(” “)包括时,与 $*
稍有例外,下边将会讲到。
$?
    上个命令的退出状态,或函数的重返值。一般景观下,超越伍分之叁限令实施成功会重临0,战败重回 一。
$$     当前Shell进程ID。对于 Shell 脚本,便是那一个本子所在的进度ID。

前方早已讲到,变量名只能分包数字、字母和下划线,因为一些含有其余字符的变量有异乎日常含义,那样的变量被叫做特殊变量。

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

非同一般变量列表

和命令行参数,Shell特殊变量。变量 含义

  • $0 当前剧本的文书名
  • $n 传递给脚本或函数的参数。n
    是1个数字,表示第多少个参数。比如,第二个参数是$一,第四个参数是$二。
  • $# 传递给脚本或函数的参数个数。
  • $* 传递给脚本或函数的具有参数。
  • $@ 传递给脚本或函数的装有参数。被双引号(” “)包括时,与 $*
    稍有两样,下边将会讲到。
  • $?
    上个命令的淡出状态,或函数的再次来到值。一般景况下,大多数命令推行成功会回到
    0,战败再次回到 壹。
  • $$ 当前Shell进度ID。对于 Shell 脚本,正是这几个本子所在的经过ID。

$* 和 $@ 的区别
$* 和 $@ 都意味传递给函数或脚本的享有参数,不被双引号(”
“)包括时,都以”$1” “$二” … “$n” 的款型出口全部参数。
唯独当它们被双引号(” “)包蕴时,”$*” 会将兼具的参数作为三个完完全全,以”$1$二 … $n”的款型出口全部参数;”$@” 会将逐条参数分开,以”$1″ “$二” … “$n”
的花样出口全部参数。

比如,$ 表示最近Shell进程的ID,即pid,看上面包车型客车代码:

$* 和 $@ 的区别

$* 和 $@ 都意味着传递给函数或脚本的具备参数,不被双引号(”
“)包罗时,都是”$一” “$二” … “$n” 的样式出口全数参数。可是当它们被双引号(”
“)包涵时,”$*” 会将享有的参数作为1个完全,以”$壹 $二 …
$n”的花样出口全数参数;”$@” 会将相继参数分开,以”$壹” “$二” … “$n”
的款型出口全体参数。下边包车型大巴例子能够知晓的看出 $* 和 $@ 的区别:

 1 #!/bin/bash
 2 echo "\$*=" $*
 3 echo "\"\$*\"=" "$*"
 4 echo "\$@=" $@
 5 echo "\"\$@\"=" "$@"
 6 echo "print each param from \$*"
 7 for var in $*
 8 do
 9     echo "$var"
10 done
11 echo "print each param from \$@"
12 for var in $@
13 do
14     echo "$var"
15 done
16 echo "print each param from \"\$*\""
17 for var in "$*"
18 do
19     echo "$var"
20 done
21 echo "print each param from \"\$@\""
22 for var in "$@"
23 do
24     echo "$var"
25 done

推行 ./test.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
print each param from "$@"
a
b
c
d  

证实:双引号包罗时,”$*”的参数被看做3个总体,而”$@”照旧遍历每多少个参数。

(参考:)

诸如,$$代表近期Shell进度的ID,即pid,看上面包车型大巴代码:

$echo $$

美高梅手机版4858 1

运维结果

特种变量列表

29949

变量含义

– $0当前剧本的文书名

– $n传递给脚本或函数的参数。n
是二个数字,表示第多少个参数。比如,第贰个参数是$一,第一个参数是$2。 

– $#传递给脚本或函数的参数个数。

– $*传递给脚本或函数的具备参数。

– $@传递给脚本或函数的具有参数。被双引号(” “)包涵时,与 $*
稍有两样,下边将会讲到。

– $?上个命令的退出状态,或函数的重临值。

– $$当前Shell进程ID。对于 Shell 脚本,正是那一个本子所在的历程ID。

特殊变量列表
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

命令行参数

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

请看下边包车型地铁本子:

美高梅手机版4858 2

运转结果:

美高梅手机版4858 3

命令行参数

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

请看上边包车型客车本子:

#!/bin/bash
echo "File Name: $0"echo "First Parameter : $1"echo "First Parameter : $2"echo "Quoted Values: $@"echo "Quoted Values: $*"echo "Total Number of Parameters : $#"

运转结果:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

$* 和 $@ 的区别

$* 和 $@ 都意味传递给函数或脚本的有所参数,不被双引号(”
“)包涵时,都是”$壹” “$二” … “$n” 的款式出口全部参数。

不过当它们被双引号(” “)包涵时,”$*” 会将具有的参数作为一个完全,以”$一$二 … $n”的花样出口全数参数;”$@” 会将相继参数分开,以”$一” “$2” … “$n”
的款型出口全部参数。

下边包车型客车例子能够明白的看看 $* 和 $@ 的区别:

美高梅手机版4858 4

实践 ./diff.sh  “a” “b” “c” “d”,看到上面包车型大巴结果:

美高梅手机版4858 5

$* 和 $@ 的区别

$* 和 $@ 都代表传递给函数或脚本的装有参数,不被双引号(”
“)包含时,都是”$一” “$2” … “$n” 的款型出口全部参数。

只是当它们被双引号(” “)包蕴时,”$*” 会将兼具的参数作为3个完完全全,以”$一$2 … $n”的款型出口全数参数;”$@” 会将顺序参数分开,以”$一” “$贰” … “$n”
的情势出口全体参数。

上面包车型大巴例证能够理解的阅览 $* 和 $@ 的区别:

#!/bin/bashecho "\$*=" $*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 \"\$*\""for var in "$*"do    echo "$var"done
echo "print each param from \"\$@\""for var in "$@"do    echo "$var"done

施行 ./test.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
print each param from "$@"
a
b
c
d

脱离状态

$?
能够赚取上二个命令的脱离状态。所谓退出状态,正是上二个指令推行后的回来结果。

剥离状态是多个数字,一般景观下,大部分指令推行成功会回到 0,失利重返 一。

可是,也有局地命令归来其余值,表示不一样档期的顺序的一无可取。

上边例子中,命令成功实行:

美高梅手机版4858 6

$? 也得以象征函数的再次来到值,后续将会讲课。

脱离状态

$?
能够收获上二个指令的脱离状态。所谓退出状态,正是上2个发令试行后的回到结果。

剥离状态是多少个数字,一般景色下,一大半发令施行成功会再次来到 0,失败再次来到一。

然则,也有1部分指令归来其余值,表示差异等级次序的一无所长。

上边例子中,命令成功实施:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$

$? 也得以象征函数的重返值,后续将会讲课。

美高梅手机版4858 ,参考资料

Shell特殊变量

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有