特种变量列表

变量     含义
$0      当前剧本的文件名
$n      传递给脚本或函数的参数。n
是叁个数字,表示第多少个参数。举例,第3个参数是$一,第3个参数是$二。
$#      传递给脚本或函数的参数个数。
$*      传递给脚本或函数的具备参数。
$@       传递给脚本或函数的具备参数。被双引号(” “)包括时,与 $*
稍有差异,上面将会讲到。
$?
    上个命令的退出状态,或函数的重返值。一般景观下,大部分限令实施成功会再次来到0,失利重临 一。
$$     当前Shell进度ID。对于 Shell 脚本,正是那些本子所在的进程ID。

后边已经讲到,变量名只好分包数字、字母和下划线,因为有些含有其余字符的变量有独辟蹊径意义,那样的变量被喻为特殊变量。

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

分外变量列表

变量 含义

  • $0 当前剧本的公文名
  • $n 传递给脚本或函数的参数。n
    是3个数字,表示第多少个参数。举个例子,第一个参数是$一,第三个参数是$2。
  • $# 传递给脚本或函数的参数个数。
  • $*shell特殊变量,特殊变量。 传递给脚本或函数的具有参数。
  • $@ 传递给脚本或函数的有着参数。被双引号(” “)包涵时,与 $*
    稍有差别,下边将会讲到。
  • $?
    上个命令的脱离状态,或函数的重返值。一般意况下,当先四分之二命令推行成功会回来
    0,战败重回 1。
  • $$ 当前Shell进度ID。对于 Shell 脚本,便是这一个本子所在的进度ID。

$* 和 $@ 的区别
$* 和 $@ 都代表传递给函数或脚本的全体参数,不被双引号(”
“)蕴含时,都是”$1” “$二” … “$n” 的花样出口全数参数。
而是当它们被双引号(” “)包罗时,”$*” 会将有着的参数作为八个完整,以”$一$二 … $n”的情势出口全体参数;”$@” 会将逐条参数分开,以”$一” “$二” … “$n”
的款式出口全体参数。

:特殊变量列表

$* 和 $@ 的区别

$* 和 $@ 都代表传递给函数或脚本的兼具参数,不被双引号(”
“)包括时,都是”$一” “$二” … “$n” 的款式出口全部参数。但是当它们被双引号(”
“)包罗时,”$*” 会将具有的参数作为3个一体化,以”$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  

注脚:双引号包罗时,”$*”的参数被当作八个全体,而”$@”如故遍历每贰个参数。

(参考:)

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

  • $0 当前剧本的文件名
  • $n 传递给脚本或函数的参数。n
    是八个数字,表示第多少个参数。比方,第1个参数是$一,第一个参数是$二。
  • $# 传递给脚本或函数的参数个数
  • $* 传递给脚本或函数的全部参数。
  • $@ 传递给脚本或函数的富有参数。被双引号(” “)包涵时,与 $*
    稍有例外
  • $? 上个命令的退出状态,或函数的再次来到值。
  • $$ 当前Shell进程ID。对于 Shell 脚本,就是那么些本子所在的经过ID。

澳门金沙国际 1

脚本:

特殊变量列表

#!/usr/bin/env sh

echo "pid" "  " "\$\$ -> $$"
echo "filename" "  " "\$0 -> $0"
echo "param1" "  " "\$1 -> $1"
echo "param2" "  " "\$2 -> $2"
echo "allparams" "  " "\$* -> $*"
echo "allparams" "  " "\$@ -> $*"
echo "totalparams" "  " "\$# -> $#"

变量含义

– $0当前剧本的公文名

– $n传递给脚本或函数的参数。n
是一个数字,表示第多少个参数。举例,第三个参数是$一,第一个参数是$二。 

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

– $*传送给脚本或函数的具有参数。

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

– $?上个命令的淡出状态,或函数的再次来到值。

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

运作命令:

命令行参数

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

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

澳门金沙国际 2

运作结果:

澳门金沙国际 3

./test p1 p2 p3

$*澳门金沙国际, 和 $@ 的区别

$* 和 $@ 都意味着传递给函数或脚本的具备参数,不被双引号(”
“)包涵时,都是”$1” “$二” … “$n” 的样式出口全数参数。

唯独当它们被双引号(” “)包蕴时,”$*” 会将富有的参数作为二个完完全全,以”$一$2 … $n”的款型出口全数参数;”$@” 会将逐1参数分开,以”$1″ “$二” … “$n”
的方式出口全体参数。

上边包车型大巴例子能够知道的观察 $* 和 $@ 的区别:

澳门金沙国际 4

实行 ./diff.sh  “a” “b” “c” “d”,看到下边包车型地铁结果:

澳门金沙国际 5

运转结果:

剥离状态

$?
能够收获上2个下令的脱离状态。所谓退出状态,正是上1个命令实施后的回来结果。

退出状态是1个数字,一般景观下,大多数下令试行成功会回来 0,退步重临 一。

只是,也有一些限令归来其余值,表示分裂品类的不当。

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

澳门金沙国际 6

$? 也能够表示函数的再次回到值,后续将会讲课。

pid    $$ -> 717
filename    $0 -> ./test.sh
param1    $1 -> p1
param2    $2 -> p2
allparams    $* -> p1 p2 p3
allparams    $@ -> p1 p2 p3
totalparams    $# -> 3

参考资料

Shell特殊变量

$* $@区别

$* 和 $@ 都表示传递给函数或脚本的全部参数,不被双引号(”
“)蕴含时,都是”$1” “$二” … “$n” 的样式出口全数参数。

而是当它们被双引号(” “)包括时,”$*” 会将兼具的参数作为七个完完全全,以”$壹$贰 … $n”的款型出口全数参数;”$@” 会将逐条参数分开,以”$1″ “$二” … “$n”
的方式出口全体参数。

#!/usr/bin/env sh

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 \"\$*\""
for var in "$*"
do
echo "$var"
done

echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done

./test 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

相关文章