Как да цитирам psql израз с помощта на su -c и bash скрипт?

Опитвам следното изявление в bash скрипт:

su -c  "psql -d myDB-c 'SELECT count(*) AS number, date_trunc('day'::text, users.registerdate) AS registerdate FROM users;'" postgres

Проблемът е параметърът 'day', който трябва да бъде цитиран, но вътре в кавичките не работи.


person Lynckmeister    schedule 06.02.2015    source източник


Отговори (1)


Изглежда се опитвате да поставите единични кавички в единични кавички, което разбира се не можете да направите. 'this'and'that' анализира в 'this', последвано от and без кавички, последвано от 'that', а не в низ в кавички this'and'that.

Обичайното решение е да поставите единични кавички в двойни кавички или обратно, така че "this'and'that" или 'this"and"that', ако заместването на двойни кавички вътре в низа в кавички е приемливо; но тук вече имате и двете, така че не можете да направите това (направо).

Ако приемем, че psql може да чете команди от stdin, простото решение тук е да използвате тук документ.

su -c "psql -d myDB-c <<'____HERE' 
    SELECT count(*) AS number,
           date_trunc('day'::text, users.registerdate) AS registerdate
    FROM users;
____HERE" postgres
person tripleee    schedule 06.02.2015
comment
Можете също така да използвате синтаксиса на ANSI C низ на Bash. Вижте stackoverflow.com/questions/11966312/ - person tripleee; 06.02.2015