Linux中 $0 $1 $# $@ $* $? 含义

一、$0, $1, $2,…, $n

$0:这个特殊一点表示命令本身的名字
$1 表示第一个参数
$2:表示第二个参数
$n:表示第n个参数

[root@localhost shell]# cat test01.sh 
echo $0
echo $1
echo $2
[root@localhost shell]# ./test01.sh Hello World
./test01.sh
Hello
World
[root@localhost shell]# bash test01.sh Hello World
test01.sh
Hello
World

二、$#

$#:表示实际的参数个数

[root@localhost shell]# cat test02.sh 
echo "length is " $#
[root@localhost shell]#bash test02.sh 1 2 aa bb
length is  4

三、$$

$$:表示当前进程的pid

[root@localhost shell]# cat test03.sh 
echo "my pid is " $$
[root@localhost shell]# bash test03.sh 
my pid is  47282
[root@localhost shell]# echo $$
46946

四、$?

$?:表示上一个命令执行的退出状态(0表示没有错误,其他表示有错误

[root@localhost shell]# cat test.sh 
exit 66 
[root@localhost shell]# ./test.sh 
[root@localhost shell]# echo $?
66

五、$!

$!:表示最近一个后台执行程序的pid

[root@localhost shell]# sleep 60 &
[1] 47395
[root@localhost shell]# sleep 70 &
[2] 47396
[root@localhost shell]# echo $!
47396

六、其他

$-
使用Set命令设定的Flag一览 
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

七、总结

vim test.sh

#!/bin/sh 
echo "number:$#" 
echo "scname:$0" 
echo "first :$1" 
echo "second:$2" 
echo '     -----$*'
for i in "$*"; do
    echo $i
    done

echo '     -----$@'
for i in "$@"; do
    echo $i
    done
echo "PID:$$"

bash test.sh aa bb cc

参考链接:https://www.runoob.com/linux/linux-shell-passing-arguments.html

猜你喜欢

转载自blog.csdn.net/l_liangkk/article/details/105649018
今日推荐