📜  双美元符号 bash - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:50:32.592000             🧑  作者: Mango

双美元符号 bash - Shell-Bash

在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}"
后台运行并输出进程ID

我们可以使用双美元符号$$在bash脚本中将进程后台化并输出PID。

#!/bin/bash

/path/to/program &
echo $! > program.pid

exit 0

这个脚本会在后台运行/path/to/program并将进程ID写入到program.pid文件中。这个文件可以用来杀死进程。

总结

双美元符号$$${$}在bash中都可以用来获取当前进程的PID。我们可以利用这个特殊变量来实现一些有用的功能,比如避免脚本并发运行、后台运行程序并输出PID等。