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?

4

2 回答 2

4

一种廉价的调试方法是echo用来查看您传递给 php 的内容:

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

节目

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

您已经在使用来表示“shell 变量 uri 的值”,因此它也被视为 shell 变量并扩展为它的值(未设置,什么都没有)也就$uri不足为奇了。$parse

\$当您想要在双引号字符串中使用文字美元符号时使用:

value=$(php -r "\$parse = parse_url('$uri'); echo \$parse['$key']")
于 2014-03-03T06:45:30.897 回答
3

您可以轻松使用它,但您必须小心,因为在 bash 中转义。

我建议使用单引号(您不需要转义任何内容)并在您想做一些特别的事情时退出引号。你的例子:

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

注意

  • 你不需要逃避$parse
  • 插入 bash 变量时需要从单引号中退出:'$url'
  • 你不能在单引号中使用单引号!请改用双引号"

更新:

只是为了澄清 - 发生解析错误是因为$parse被解释为 bash 变量(空字符串),所以 php 命令错误地以=.

于 2014-03-03T07:02:20.933 回答