在命令行上,我得到这个:
$ 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完成.