Как избежать двойных кавычек внутри двойных кавычек в двойных кавычках? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь выполнить следующую команду:

su -l user1 -c "hive -e \"ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\"$val\");\""

Я получаю ошибку:

FAILED: ParseException line 1:81 cannot recognize input near 'val1' ')' '<EOF>' in constant

Таким образом, проблема здесь связана с вложенными двойными кавычками 2-го уровня, между которыми есть переменная $val, значение которой val1.

Можете ли вы помочь мне решить это? А лучше всего дать мне правило для вложенных цитат.

1 Ответ

0 голосов
/ 07 января 2019

В этом конкретном случае вы можете использовать одинарные кавычки вместо внутренних (в настоящее время экранированных) двойных кавычек, поскольку одинарные кавычки внутри двойных кавычек вовсе не являются специальными.

su -l user1 -c "hive -e 'ALTER TABLE schema1.table1 DROP IF EXISTS PARTITION (att1=\"$val\");'"

В общем случае вы не всегда можете избежать смерти, избегая обратной косой черты. Общие правила цитирования очень просты; текст между одинарными кавычками дословно заключен в кавычки, в то время как двойные кавычки более слабые, но позволяют выполнять обратную косую черту в том, что не должно быть затронуто оболочкой.

...