Обезвреживаем одинарные кавычки в Bash
Илья • 3 декабря 2009 г.
Казалось бы очень просто, с помощью косой черты. Но если кавычку нужно выкинуть из выражения, которое уже окружено одинарными кавычками, то это не сработает. Правильно будет вот так: (не обращайте внимания на сломанную подсветку кода)
def enclose_in_single_quotes(string)
string.split(/'/, -1).map{|e| "'#{e}'"}.join("\\'")
end
enclose_in_single_quotes("ilya'") # => 'ilya'\'''
enclose_in_single_quotes("super'bla'test") # => 'super'\''bla'\''test'
Кромешный винегрет, но в Баше это единственный способ. Очень полезная штука, если из приложения приходится вызывать системные команды и передавать туда аргументы в одинарных кавычках.
2 комментария:
Извините, но комментарии для этой статьи уже закрыты.

Посмотрите на lib/shellwords.rb. Вывод отличается, но возможно это то, что вам нужно.
http://svn.ruby-lang .org/cgi-bin /viewvc.cgi/tags/v1_8_7_174/lib/shellwords.rb?view=markup
shellescape – Escapes a string so that it can be safely used in a Bourne shell command line.
shellescape не поможет, так как он просто эскейпит кавычки косыми чертами. А в книжке по Башу чётко сказано, что использовать одинарные кавычки внутри одинарных кавычек нельзя, даже если их отэскейпить.