Существует ли способ выйти из одинарных кавычек в оболочке?

Например, Я хочу сказать

perl -e 'print '"'"'Hello, world!'"'"', "\n";'

Существует ли менее неловкий способ сделать это, например, выходящий из одинарных кавычек?

Да, я знаю, что могу записать

perl -e 'print q[Hello, world!], "\n"'
perl -e 'print "Hello, world!\n"'

Но этот вопрос о заключении в кавычки в оболочке, не в Perl.

Мне интересно, как выполнить в нем bash и csh во-первых.

11
задан 01.03.2010, 09:26

3 ответа

Dennis указывает на обычные альтернативы в своем ответе (единственные-в-двойном, двойные-в-единственном, единственные заключенные в кавычки строки, связанные с завершенными одинарными кавычками; Вы уже упомянули настраиваемые операторы кавычки Perl), но возможно это - прямой ответ, который Вы искали.

В подобных Границе оболочках (sh, ksh, пепел, тире, удар, zsh, и т.д.) единственные заключенные в кавычки строки являются абсолютно литеральными. Это помогает включать символы, которые оболочка иначе рассматривала бы особенно, не имея необходимость выходить из них, но это действительно означает, что сам символ одинарной кавычки не может быть включен в единственные заключенные в кавычки строки.

Я отказываюсь даже думать об оболочках csh-типа, так как они крайне повреждаются в других отношениях (см., что Csh Программирует Продуманный Вредный).

9
ответ дан 07.12.2019, 12:20

Для меня все Ваши примеры производят:

Привет, мир!

И так делает это:

perl -e 'print "Hello, world!", "\n";'

И это:

perl -e 'print '\''Hello, world!'\'', "\n";'

Можно ли разъяснить то, что это, Вы пытаетесь сделать?

В оболочке, такой как Bash, если Вы хотите распечатать кавычки как часть строки, один тип кавычек выходит из другого.

$ echo '"Hello, world!"'
"Hello, world!"
$ echo "'Hello, world!'"
'Hello, world!'

Править:

Вот иначе:

$ perl -e 'print "\047Hello, world!\047", "\n";'
'Hello, world!'
$ echo -e "\047Hello, world! \047"
'Hello, world! '

Пространство после восклицательного знака избегает ошибки расширения истории. Я, возможно, сделал set +H вместо этого.

5
ответ дан 07.12.2019, 12:20

Можно использовать \' и \" для выхода из кавычек с жемчугом, если используется внутренне как часть сценария жемчуга. Я не уверен, примет ли командная строка это все же. Вы могли попробовать его и видеть, работает ли это.

-1
ответ дан 07.12.2019, 12:20

Теги

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