4

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

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

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

4

2 回答 2

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
于 2012-08-15T18:49:13.173 回答
1

正如@marc 所说, exec 实际上是在返回进程的 PID。

然而,这仍然是在 PHP 中使用的“狡猾”的语法,因为你必须小心放置它,''否则 PHP 会用它做一些特别的事情。基本上,PHP 能够以两种方式使用变量:

$a

和:

$$a

后者使用 $a 的值实际到达一个新的变量名,所以你必须小心你如何使用该语法(http://www.php.net/manual/en/language.variables.variable.php )。

于 2012-08-15T18:54:01.493 回答