【发布时间】:2012-08-29 10:02:59
【问题描述】:
我正在阅读 Linux 的 shell 脚本,发现变量 $$:两个美元符号。基本上整行是
work_dirname=/tmp/my-work-$$
$$ 是什么意思?
【问题讨论】:
我正在阅读 Linux 的 shell 脚本,发现变量 $$:两个美元符号。基本上整行是
work_dirname=/tmp/my-work-$$
$$ 是什么意思?
【问题讨论】:
$$ 给出 shell 的进程 ID。
【讨论】:
$work_dirname现在持有/tmp/my-work-4321?感谢您的帮助!
my-work-4321是目录还是文件?
mkdir $work_dirname 将创建一个目录 /tmp/my-work-4321。
它是脚本本身的进程 ID (PID)。
$$变量经常 在脚本中查找用于构造“唯一”临时文件名(请参阅 例 32-6、例 16-31 和例 15-27)。这通常是 比调用 mktemp 更简单。
(来源:http://tldp.org/LDP/abs/html/internalvariables.html#PROCCID)
【讨论】:
这是正在执行的脚本的进程 ID。这可用于为临时文件创建一个唯一的文件名,这就是您正在查找的脚本可能正在执行的操作。
见:http://tldp.org/LDP/abs/html/internalvariables.html#PROCCID
【讨论】:
@KingsIndian 是对的:$$ 给出了 shell 的进程 ID。
但什么是进程 ID?
要理解这一点,试试这个:
$ echo $$
$ sh
$ echo $$
$ exit
$ echo $$
第一个和第三个回显打印相同的进程 ID,但中间一个打印不同的。不同之处在于sh 命令会挂起您现有的shell 并打开一个新的shell,这是一个新进程并且有自己的ID。
当你希望每个 shell 都有自己的文件时使用你的示例中的语法,这不会与其他 shell 打开的文件发生冲突。这是否可靠取决于将要对文件执行什么操作,但这是一种有时会被使用的策略。
另见mktemp 命令。
【讨论】: