Я всегда просто заменяю каждую встроенную одинарную кавычку на последовательность: '\''
(то есть: кавычка с кавычками в кавычках), которая закрывает строку, добавляет экранированную одинарную кавычку и снова открывает строку.
Я часто запускаю функцию «quotify» в моих скриптах Perl, чтобы сделать это для меня. Шаги будут:
s/'/'\\''/g # Handle each embedded quote
$_ = qq['$_']; # Surround result with single quotes.
Это в значительной степени заботится обо всех случаях.
Жизнь становится веселее, когда вы вводите eval
в свои shell-скрипты. Вы, по сути, должны заново оценить все заново!
Например, создайте сценарий Perl с именем quotify, содержащий приведенные выше операторы:
#!/usr/bin/perl -pl
s/'/'\\''/g;
$_ = qq['$_'];
затем используйте его для генерации строки в правильных кавычках:
$ quotify
urxvt -fg '#111111' -bg '#111111'
результат:
'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'\''\'\'''\'''\'''