2014-03-03 34 views
3

我需要在shell脚本中解析uri。所以,我试图在bash中使用php,如下所示。如何在bash中执行php脚本?

#!/bin/sh 

uri="http://www.google.com?key=value 
key="host" 

value=$(php -r "$parse = parse_url('$uri'); echo $parse['$key']") 

它示出了下面的错误。

PHP Parse error: syntax error, unexpected '=' in Command line code on line 1 

一些身体可以帮助如何使用PHP嵌入在bash?

+0

你为什么不在PHP中调用它并调用php? 'php test.php'也可以在命令行上用与bash脚本相同的方式调用。无论如何,似乎你也对PHP更加自如。 – Prix

回答

4

调试此的一种廉价的方式是使用echo看到你传递什么到PHP:

echo "$parse = parse_url('$uri'); echo $parse['$key']" 

显示

= parse_url('http://www.google.com?key=value'); echo ['host'] 

您已经在使用$uri表示“在shell变量uri的值“,所以$parse也被视为一个shell变量并扩展到它的值(unset,nothing)也就不足为奇了。

使用\$当你想你的双引号字符串文字美元符号:

value=$(php -r "\$parse = parse_url('$uri'); echo \$parse['$key']") 
3

您可以轻松地使用它,但你必须,因为在bash逃逸的要小心。

我建议使用单引号当你想要做一些特别的东西(你不需要逃避任何东西)从报价和退出。你的榜样:

php -r '$parse=parse_url("'$url'"); echo $parse["'$part'"];' 

注意

  • 你不需要逃脱$parse
  • 你需要插入bash的变量时,从单引号退出:'$url'
  • 你不能使用单引号单引号!请使用双引号"代替。发生解析错误,因为$parse被解释为bash的变量(空字符串),所以PHP命令错误地开始= -

    只是为了澄清:

更新。