Как выполнить 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 неправильно начиналась с =
,