Компиляция из источника является лучшим способом, потому что это всегда - последний источник. Когда я компилирую php для своего поля, это дает мне всегда неправильное имя. Я должен зафиксировать его вручную для апача:-sf/usr/lib/apache2/libphp5.so/usr/lib/apache2/mod_php5.so ln. Но это может зависеть от Вашей конфигурации. Вы работают, делают тест после того, как делают? Это должно показать Вам еще некоторую информацию.
В одинарных кавычках никакой символ не имеет особое значение. В двойных кавычках, "\$`
имейте особое значение. Работа это из внешней стороны в: первая фигура, какая строка создается внешней оболочкой, затем что внутренняя оболочка сделает из нее.
Например, если переменная a
не определяется во внешней оболочке, с
sh -c "bash -c \"a=1; echo a\$a;\""
внешняя оболочка видит дважды заключенную в кавычки строку, которая расширяется до bash -c "a=1; echo a$a;"
, и случается так, что строка, которая передается промежуточному звену sh
. sh
синтаксические анализы это как вызов к bash
с этими двумя аргументами -c
и a=1; echo a;
, последний, следующий из расширения дважды заключенной в кавычки строки "a=1; echo a$a;"
где переменная a
не определяется.
Если Вы делаете этот анализ, Вы видите, что один способ добраться, что Вы хотите, состоял бы в том, чтобы иметь "a=1; echo a\$a;"
на данном этапе. Для получения этой дополнительной обратной косой черты необходимо поместить две обратных косых черты в оригинал, так как уже был один этап расширения оболочки в двойных кавычках. Два плюс каждый равняется трем.
sh -c "bash -c \"a=1; echo a\\\$a;\""
Было бы более просто использовать одинарные кавычки для внешней строки, так как Вы не хотите разворачивать что-либо там.
sh -c 'bash -c "a=1; echo a\$a;"'
Так как Вы не хотите разворачивать что-либо, когда Вы звоните bash
от sh
также, Вы могли использовать одинарные кавычки там также. Вы не можете поместить одинарные кавычки в единственно заключенной в кавычки строке, но существует способ моделировать это: поместить '\''
. Официально это завершает единственно заключенный в кавычки литерал, добавляет литеральную одинарную кавычку и запускает новый единственно заключенный в кавычки литерал, но можно думать о четырех последовательностях символов '\''
как являющийся способом поместить одинарную кавычку в единственно заключенной в кавычки строке.
sh -c 'bash -c '\''a=1; echo a$a;'\'''
Можно опустить это ''
в конце это менее систематично, но легче на глазах.
sh -c 'bash -c '\''a=1; echo a$a;'\'
Одинарные кавычки не являются специальными внутренними двойными кавычками, поэтому когда Вы пишете "bash -c 'a=1; echo a\$a;'"
Вам нужна обратная косая черта перед долларом для предотвращения расширения $a
во внешней оболочке.
Ну, я нашел пару, которые действительно работают (NB, это - Ubuntu 11.04):
$ sh -c "bash -c 'a=1; echo a\$a \'"
a1
$ sh -c "bash -c 'a=1; echo a\$a;'"
a1
... и это кажется, пока первая одинарная кавычка не завершена, и доллара оставляют - это работает, независимо если заключительной одинарной кавычки оставляют или нет! Который озадачивает меня довольно немного тихий...
sh -c "bash -c 'a=1; echo a\$a \'"
работы случайностью, но это немного причудливо. Заключительной одинарной кавычки не оставляют: \'
сохраняет обратную косую черту в двойных кавычках. Команда передала bash
'a=1; a$a эха', и что заключительная обратная косая черта, оказывается, не имеет никакого эффекта.
– Gilles 'SO- stop being evil'
24.04.2013, 04:22