曲径通幽论坛

标题: 内置变量:$-, $_, $$, $! [打印本页]

作者: beyes    时间: 2011-6-5 21:52
标题: 内置变量:$-, $_, $$, $!
$- 变量表示传递给脚本的 FLAG,这个 FLAG 是由 set 命令指定的。

示例代码:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

set -x -e

echo "hello shell builtin varibal"
echo "$-"

exit 0

运行输出:
$ ./var.sh
+ echo 'hello shell builtin varibal'
hello shell builtin varibal
+ echo ehxB
ehxB
+ exit 0
在脚本中,我们用 set 为脚本添加了 -e 和 -x 两个 Flag,然后在 echo $- 中可以看到这两个 Flag 的输出,在 ehxB 中,h 和 B 这两个 Flag 是默认传递进来的。

$$ 变量表示当前脚本的 PID 值。看下面代码示例:
[Bash shell] 纯文本查看 复制代码
#!/bin/sh

echo "$$"

sleep 30

exit 0

运行上面的脚本,然后在 30 秒内在另一个终端里用 ps 命令验证即可知晓。

$! 变量表示后台运行的最后的工作的 PID 。

测试代码:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

LOG=$0.log

COMMAND1="sleep 100"

echo "Logging PIDs background commands for script: $0" >> "$LOG"

echo >> "$LOG"

echo -n "PID of \"$COMMAND1\": " >> "$LOG"

${COMMAND1} &

echo $! >> "$LOG"

在输出的 LOG 文件中可以看到 sleep 这个进程的 PID 号(sleep),在 100S 期间可以用 ps 来进行验证。

$_ 该变量保存之前执行命令的最后一个参数。
比如运行指令 ps aux ,然后再运行 echo $_ 就可以看到输出为:
$ ps aux

$ echo $_
aux





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2