PHP是否使用带exec()的$$,以及如何为下一个脚本保留它?

时间:2012-08-15 18:46:53

标签: php bash

我使用PHP exec()在其命令行中有$$的Bash中启动一个进程。但是当使用PHP时,PHP本身似乎采用变量$$而不是让Bash在脚本中使用它。

PHP是否使用此变量?假设是这样,我如何为Bash脚本保留它?

示例:exec('echo $$')在Bash中执行echo 1538,而不是echo $$,因为PHP似乎已采用变量$$。

2 个答案:

答案 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)。