Как выполнить PHP-скрипты в Bash?

Мне нужно разобрать URI в сценариях оболочки. Итак, я попытался использовать php в bash, как показано ниже.

#!/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?

2 ответа

Дешевый способ отладки это использовать echo чтобы увидеть, что вы передаете в php:

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

шоу

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

Вы уже используете $uri означать "значение переменной оболочки URI", поэтому не удивительно, что $parse также считается переменной оболочки и расширяется до ее значения (не установлено, ничего).

использование \$ когда вы хотите буквальный знак доллара в вашей строке в двойных кавычках:

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

Вы можете использовать его легко, но вы должны быть осторожны из-за выхода в bash.

Я рекомендую использовать одинарные кавычки (вам не нужно ничего экранировать) и выходить из кавычек, когда вы хотите сделать что-то особенное. Ваш пример:

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

Обратите внимание, что

  • вам не нужно убегать $parse
  • вам нужно выйти из одинарных кавычек при вставке переменной bash: '$url'
  • Вы не можете использовать одинарные кавычки в одинарных кавычках! используйте двойные кавычки " вместо.

Обновить:

Просто для пояснения - ошибка разбора произошла потому что $parse была интерпретирована как переменная bash (пустая строка), поэтому команда php неправильно начиналась с =,

Другие вопросы по тегам