Как избежать одинарных кавычек внутри одинарных строк?

Используйте недокументированную опцию disablePanMomentum , например:

new google.maps.Map(document.getElementById(id), {
    disablePanMomentum: true,
    backgroundColor: 'none',
    disableDefaultUI: true,
    center: {
        lat: 40.674,
        lng: -73.945
    },
    zoom: 2,
    ...
881
задан codeforester 1 September 2018 в 19:05
поделиться

4 ответа

If you really want to use single quotes in the outermost layer, remember that you can glue both kinds of quotation. Example:

 alias rxvt='urxvt -fg '"'"'#111111'"'"' -bg '"'"'#111111'"'"
 #                     ^^^^^       ^^^^^     ^^^^^       ^^^^
 #                     12345       12345     12345       1234

Explanation of how '"'"' is interpreted as just ':

  1. ' End first quotation which uses single quotes.
  2. " Start second quotation, using double-quotes.
  3. ' Quoted character.
  4. " End second quotation, using double-quotes.
  5. ' Start third quotation, using single quotes.

If you do not place any whitespaces between (1) and (2), or between (4) and (5), the shell will interpret that string as a one long word.

1350
ответ дан 19 December 2019 в 20:22
поделиться

Я не вижу записи в его блоге (пожалуйста, ссылка?), Но согласно справочному руководству GNU :

Заключение символов в одинарные кавычки ('' ') сохраняет буквальное значение каждый символ в кавычках. А одинарная кавычка не может находиться между одинарные кавычки, даже если им предшествует обратная косая черта.

, поэтому bash не поймет:

alias x = 'y \' z '

однако вы можете сделать это, если заключите в двойные кавычки:

alias x="echo \'y "
> x
> 'y
48
ответ дан 19 December 2019 в 20:22
поделиться

Я специально не рассматриваю проблему цитирования, потому что, ну, иногда, просто разумно рассмотреть альтернативный подход.

rxvt() { urxvt -fg "#${1:-000000}" -bg "#${2:-FFFFFF}"; }

который вы затем можете назвать:

rxvt 123456 654321

идея заключается в что теперь вы можете использовать псевдоним, не заботясь о кавычках:

alias rxvt='rxvt 123456 654321'

или, если вам по какой-то причине необходимо включить # во все вызовы:

rxvt() { urxvt -fg "${1:-#000000}" -bg "${2:-#FFFFFF}"; }

, который затем можно назвать:

rxvt '#123456' '#654321'

, тогда , конечно, псевдоним:

alias rxvt="rxvt '#123456' '#654321'"

(ой, я полагаю, я как бы обратился к цитате :)

14
ответ дан 19 December 2019 в 20:22
поделиться

Я всегда просто заменяю каждую встроенную одинарную кавычку на последовательность: '\' ' (то есть: кавычка с обратной косой чертой в кавычках), которая закрывает строку, добавляет экранированную одиночную кавычка и повторно открывает строку.


Я часто добавляю в свои сценарии Perl функцию "кавычки", чтобы сделать это за меня. Шаги следующие:

s/'/'\\''/g    # Handle each embedded quote
$_ = qq['$_']; # Surround result with single quotes.

Это в значительной степени решает все случаи.

Жизнь становится веселее, когда вы вводите eval в свои сценарии оболочки. По сути, вам нужно снова переквалифицировать все в кавычки!

Например, создайте сценарий Perl с именем quotify, содержащий приведенные выше операторы:

#!/usr/bin/perl -pl
s/'/'\\''/g;
$_ = qq['$_'];

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

$ quotify
urxvt -fg '#111111' -bg '#111111'

result:

'urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''

который затем можно скопировать / вставить в команду псевдонима:

alias rxvt='urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''

(Если вам нужно вставить команду в eval, снова запустите кавычку:

 $ quotify
 alias rxvt='urxvt -fg '\''#111111'\'' -bg '\''#111111'\'''

результат:

'alias rxvt='\''urxvt -fg '\''\'\'''\''#111111'\''\'\'''\'' -bg '\''\'\'''\''#111111'\''\'\'''\'''\'''

, который можно скопировать / вставить в eval:

eval 'alias rxvt='\''urxvt -fg '\''\'\'''\''#111111'\''\'\'''\'' -bg '\''\'\'''\''#111111'\''\'\'''\'''\'''
246
ответ дан 19 December 2019 в 20:22
поделиться
Другие вопросы по тегам:

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