[其他的特殊变量]
$! 在后台运行的最后的工作的 PID(进程ID) test15
$_ 之前执行的命令中最后一个参数 test16
$? 命令,函数或者脚本本身的退出状态 test17
范围: 0-255
$$ 脚本自身的进程 ID test18
test15~18, 分别代码如下:
test15:
#!/bin/bash CMD="sleep 10" echo "PID: $!" ${CMD} & echo "PID: $!"
运行结果为:
./test15.sh
PID:
PID: 31670
可以看到, 如果没有将sleep命令放到后台执行, 那么$!也不会有任何的赋值
test16:
#!/bin/bash echo $_ du > /dev/null echo $_ ls -al > /dev/null echo $_ : echo $_ 输出结果是: /bin/bash du -al : test17: #!/bin/bash ls -l > /dev/null echo $? ls -l /xx > /dev/null 2>&1 echo $? function func() { return $1 } for i in 0 -1 255 256 -255 -256 do echo -n "$i: "; func $i echo $? done
$?是我们最常用的一个特殊变量, 一般我们用return来给函数赋返回值, 或者在单独的脚本中, 使用exit命令亦可. 上面的脚本运行结果如下:
0
1
0: 0
-1: 255
255: 255
256: 0
-255: 1
-256: 0
由此我们也可以看出, 返回值的范围是0-255, 如果超出范围, 也自然会映射到这个范围内
test18:
#! /bin/bash echo "I am father $$"; echo -n "1: " ./18.sh echo -n "2: " (./18.sh) echo -n "3: " source ./18.sh echo -n "4: " . ./18.sh
其中18.sh的内容为:
#! /bin/bash echo "Who am I: [$0] $$"
运行test18的结果为:
I am father 32484
1: Who am I: [./18.sh] 32485
2: Who am I: [./18.sh] 32486
3: Who am I: [./test18.sh] 32484
4: Who am I: [./test18.sh] 32484
这样我们可以看到1,2均是子进程的方式运行, 而3,4都继续沿用了父进程的process id
本文链接:https://www.poisonbian.com/post/887.html 转载需授权!