2012-08-15 78 views
4

我使用PHP exec()在Bash命令行中启动了一个名为$$的进程。当使用PHP虽然,PHP本身似乎采取变量$$,而不是让Bash在脚本中使用它。

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

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

回答

8

Php不会'取''$$值,因为它在单引号字符串中。

这是bash将其转换为处理回显命令的bash进程的PID。

如果你想从字面上输出两路通过echo命令$,你必须转义:

exec('echo \\$\\$'); 

后续:

[email protected]:~$ bash 
[email protected]:~$ echo $$ 
31285 
[email protected]:~$ php -a 
Interactive shell 

php > echo exec('echo $$'); 
31339 
php > echo exec('echo \\$\\$'); 
$$ 

随访2:

[email protected]:~$ cat pid 
#!/bin/bash 
echo $$ 
[email protected]:~$ ./pid <--new shell started to execute script 
31651 
[email protected]:~$ . pid <---script executed within context of current shell 
31550 
[email protected]:~$ echo $$ 
31550 
+1

“在Bash脚本中,它不会这样做” - 是的。 – 2012-08-15 18:52:45

+1

查看上面的后续内容。 – 2012-08-15 18:54:05

+0

bash在执行命令之前替换变量。你是在挑剔还是不明白? – 2012-08-15 18:55:59

1

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

然而,这仍然是PHP中使用的“诡计”语法,因为您必须小心地将它放在''中,否则PHP将对它做一些特殊的处理。基本上,PHP有两种方式使用变量的能力:

$a 

和:

$$a 

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

+1

@KarolyHorvath不使用'$$'是 – Sammaye 2012-08-15 18:58:44

相关问题