Как использовать апостроф ("внутри", а затем внутри ")
Мне нужно выполнить эту команду через sudo в php. Но у sudo должна быть команда внутри апострофов.
psql -c "create database radek with encoding 'unicode';" -U edumate template1
так
sudo -su postgres 'psql -c "create database radek with encoding ''unicode'';" -U edumate template1'
дает мне ошибку
ERROR: syntax error at or near "unicode"
LINE 1: create database radek with encoding unicode;
^
Я бы сказал, что ошибка происходит потому, что Юникод заключен в '. И команда sudo тоже заключена в '.
ОБНОВИТЬ
выход из юникода \'unicode\'
не работает я получил >
и он там висит навсегда....
UPDATE2
окончательный код PHP как
exec("sudo -su postgres 'psql -c \"create database " . $db . " with encoding '\"'\"'unicode'\"'\"';\" -U edumate template1'", $output);
благодаря @Matthew Scharley
1 ответ
Решение
Это немного странно, но то, что происходит с вашим двойным апострофом, заключается в том, что он закрывает строку, а затем снова открывает ее, что дает вам чистую сеть. Решение заключается в следующем:
sudo -su postgres 'psql -c "create database radek with encoding '"'"'unicode'"'"';" -U edumate template1'
то есть. Поместите апостроф в двойные кавычки между закрытием и открытием. Это будет работать как минимум bash
типа снарядов, но я не использую других, чтобы знать, как они работают.