$$ FOO在bash中做什么(在使用epm构建的deb包中)?

Jan*_*Jan 5 bash deb epm

在命令行上,我得到这个:

$ FOO=foo
$ echo $FOO
foo
$ echo $$FOO
11971FOO
Run Code Online (Sandbox Code Playgroud)

这里,$$按预期解析为shell的PID,并逐字打印"FOO".

现在,尝试理解和调试一些脚本,我发现以下内容:

#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $$FILE1 >> $$FILE2
Run Code Online (Sandbox Code Playgroud)

有问题的脚本源自Debian软件包的安装后脚本.这应该在它运行之前进行预处理吗?

更新:该脚本是使用epm构建的包的一部分,并通过以下指令读取:

%postinstall <script.sh
Run Code Online (Sandbox Code Playgroud)

在生成的deb包中,postinst脚本显示:

#!/bin/bash
FILE1=/path/to/file/1
FILE2=/path/to/file/2
echo $FILE1 >> $FILE2
Run Code Online (Sandbox Code Playgroud)

因此,处理由epm或dpkg完成.

tri*_*eee 2

这显然是 EPM 打包工具的一个功能。引用文档

请注意,列表文件中指定的所有命令都将使用 EPM 提供的变量扩展,因此请务必在命令中引用任何美元符号 ($) 字符。例如,“$foo”被替换为“foo”的值,但“$$foo”变为“$foo”。