Shell中特殊的变量

时间:2021-12-31 11:01:57

$表示当前的进程,当使用echo $$是会输出当前shell的pid

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

脚本文件varlist.sh

 #!/bin/bash

 echo "File name: $0"
echo "First parameter: $1"
echo "Second Parameter: $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameter : $#"

执行varlist.sh hello world结果输出如下:

$ sh ./varlist.sh hello world
File name: ./varlist.sh
First parameter: hello
Second Parameter: world
Quoted Values: hello world
Quoted Values: hello world
Total Number of Parameter : 2

$*与$@的区别:

当使用""是会出对于他们存在差异,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。 看下面的例子:

 #!/bin/bash
#description: use variable
#Author: blacksonny
#Copyright (c)
#Script follows here: 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

输出结果:

 $ sh ./varcompare.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,失败返回 1。