如何在bash中执行php脚本?

3
我需要在shell脚本中解析uri。因此,我尝试在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

有人能帮忙解决如何在bash中使用嵌入式PHP吗?

为什么不直接用PHP编写并调用php呢?php test.php可以像bash脚本一样在命令行中调用。看起来你更喜欢使用PHP。 - Prix
2个回答

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变量并扩展为其值(未设置,为空)。

当您想在双引号字符串中使用字面意义的美元符号时,请使用\$

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命令不正确地以=开头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接