📅  最后修改于: 2023-12-03 14:50:32.592000             🧑  作者: Mango
在Shell-Bash语言中,$
是一个特殊的字符,也被称为“美元符号”。它有多重的用途,包括:
在本文中,我们将重点介绍双美元符号$$
和${$}
在bash中的使用。
双美元符号$$
是一个特殊的变量,它默认包含当前Shell进程的进程ID(PID)。
echo $$
输出:
1234
${$}
与$$
的功能是一样一样的,它们都是用来获取当前进程的PID。
我们可以使用双美元符号$$
在脚本运行时防止多个实例同时运行。
# 获取锁文件名
lockfile="/tmp/myscript.lock"
# 如果锁文件存在说明脚本已经在运行
if [ -f "${lockfile}" ]; then
# 获取锁文件中的PID
pid="$(cat "${lockfile}")"
# 检查PID是否是本脚本的PID
if [ "${pid}" == "$$" ]; then
# 如果是,说明锁文件是上次脚本留下的,可以直接删除
rm "${lockfile}"
else
# 如果不是,说明另一个脚本已经在运行
echo "Error: script is already running with pid ${pid}"
exit 1
fi
fi
# 在锁文件中写入本脚本的PID
echo "$$" > "${lockfile}"
# 执行脚本代码...
# 结束后删除锁文件
rm "${lockfile}"
我们可以使用双美元符号$$
在bash脚本中将进程后台化并输出PID。
#!/bin/bash
/path/to/program &
echo $! > program.pid
exit 0
这个脚本会在后台运行/path/to/program
并将进程ID写入到program.pid
文件中。这个文件可以用来杀死进程。
双美元符号$$
和${$}
在bash中都可以用来获取当前进程的PID。我们可以利用这个特殊变量来实现一些有用的功能,比如避免脚本并发运行、后台运行程序并输出PID等。