我使用PHP exec()
在其命令行中有$$
的Bash中启动一个进程。但是当使用PHP时,PHP本身似乎采用变量$$
而不是让Bash在脚本中使用它。
PHP是否使用此变量?假设是这样,我如何为Bash脚本保留它?
示例:exec('echo $$')
在Bash中执行echo 1538
,而不是echo $$
,因为PHP似乎已采用变量$$。
答案 0 :(得分:8)
Php不会'取'$$
值,因为它在单引号字符串中。
将bash转换为处理echo命令的bash进程的PID。
如果你想通过echo命令输出两个$
,你将不得不逃避它们:
exec('echo \\$\\$');
随访:
marc@panic:~$ bash
marc@panic:~$ echo $$
31285
marc@panic:~$ php -a
Interactive shell
php > echo exec('echo $$');
31339
php > echo exec('echo \\$\\$');
$$
后续2:
marc@panic:~$ cat pid
#!/bin/bash
echo $$
marc@panic:~$ ./pid <--new shell started to execute script
31651
marc@panic:~$ . pid <---script executed within context of current shell
31550
marc@panic:~$ echo $$
31550
答案 1 :(得分:1)
正如@marc所说,exec实际上正在返回进程的PID。
然而,这仍然是在PHP中使用的“狡猾”语法,因为您必须小心地将它放在''
中,否则PHP会对它做一些特别的事情。基本上PHP有能力以两种方式使用变量:
$a
和
$$a
后者使用$ a的值实际到达一个新的变量名,所以你要小心你如何使用这种语法(http://www.php.net/manual/en/language.variables。 variable.php)。