2014-03-03 188 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命令錯誤地開始= -

    只是爲了澄清:

更新。