$$在shell中的含义是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我曾经读过一种在临时文件的shell中获取唯一文件名的方法是使用双美元符号($$)。这确实会产生一个不时变化的数字......但如果你重复地调用它,它将返回相同的数字。(解决方法是只使用时间。)

我很想知道$$实际是什么,以及为什么会建议这种方法来生成独特的文件名。

提问于
用户回答回答于

在Bash中$$是进程ID,正如注释中指出的那样,由于各种原因,它不适合用作临时文件名。

对于临时文件名,请使用该mktemp命令。

用户回答回答于

$$是bash中的进程ID(PID)。使用$$是一个坏主意,因为它通常会创建竞争条件,并允许攻击者破坏你的shell脚本。例如,看到所有创建不安全临时文件并且必须发布安全建议的人。

相反,使用mktemp。以下是它的一些示例代码:

tempfoo=`basename $0`
TMPFILE=`mktemp -t ${tempfoo}` || exit 1
echo "program output" >> $TMPFILE

扫码关注云+社区