Не может выйти из одинарных кавычек в оболочке

Я пытаюсь сделать команду, чтобы сделать замену жемчуга относительно пакета php файлов в каталоге. Строка, которую я хочу заменить, имеет одинарные кавычки в нем, и я не могу заставить это правильно выходить в оболочке.

Я пытался повторить строку с незавершенными кавычками, видеть то, что будет получать жемчуг:

echo 's/require_once\('include\.constants\.php'\);/require_once\('include\.constants\.php'\);require_once\("\./functions/include\.session\.inc\.php"\);/g'

и это не имеет одинарных кавычек в результате:

s/require_once\(include.constants.php\);/require_once\(include.constants.php\);require_once\("\./functions/include\.session\.inc\.php"\);/g

Однако, когда я пытаюсь выйти из одинарных кавычек:

echo 's/require_once\(\'include\.constants\.php\'\);/require_once\(\'include\.constants\.php\'\);require_once\("\./functions/include\.session\.inc\.php"\);/g'

Я заставляю подсказку завершать команду:

>

То, к чему я хочу, чтобы это проанализировало, является этим:

s/require_once\('include.constants.php'\);/require_once\('include.constants.php'\);require_once\("\./functions/include\.session\.inc\.php"\);/g

Что я делаю неправильно?

3
задан 01.04.2010, 18:27

3 ответа

Использовать " вместо ' на внешней стороне затем только необходимо выйти два " в выражении.

echo "s/require_once\('include.constants.php'\);/require_once\('include.constants.php'\);require_once\(\"\./functions/include\.session\.inc\.php\"\);/g"
1
ответ дан 08.12.2019, 01:48

Никакое расширение или оценка любого вида не происходят в единственно заключенной в кавычки строке, даже Escape обратной косой черты. Как Nifle и отправленный canen, используйте двойные кавычки и выйдите из двойных кавычек вместо одинарных кавычек. Однако только необходимо выйти из них для преимущества оболочки. Если Вы планируете использовать это s/// непосредственно в сценарии жемчуга, никакой выход не необходим, потому что Вы обычно не включали бы s/// в кавычках для начала.

Кроме того, Ваш s/// операция перестанет работать, потому что у Вас есть свой символ-разделитель / в Вашей замещающей строке. Любой Escape обратной косой черты наклонные черты в /functions/include:

s/require_once\('include.constants.php'\);/require_once\('include.constants.php'\);require_once\("\.\/functions\/include\.session\.inc\.php"\);/g

или выберите другой разделитель:

s@require_once\('include.constants.php'\);@require_once\('include.constants.php'\);require_once\("\./functions/include\.session\.inc\.php"\);@g
1
ответ дан 08.12.2019, 01:48

Почему бы не использовать двойные кавычки?

"s/require_once\('include.constants.php'\);/require_once\('include.constants.php'\);require_once\("\./functions/include\.session\.inc\.php"\);/g"
0
ответ дан 08.12.2019, 01:48

Теги

Похожие вопросы