Казалось бы очень просто, с помощью косой черты. Но если кавычку нужно выкинуть из выражения, которое уже окружено одинарными кавычками, то это не сработает. Правильно будет вот так: (не обращайте внимания на сломанную подсветку кода)

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 комментария:

  1. edbond:

    Посмотрите на 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.

  2. Илья Сабанин:

    shellescape не поможет, так как он просто эскейпит кавычки косыми чертами. А в книжке по Башу чётко сказано, что использовать одинарные кавычки внутри одинарных кавычек нельзя, даже если их отэскейпить.

Извините, но комментарии для этой статьи уже закрыты.