Что такое экранирующий символ Bash \c?

Каково имя и функция escape-символа \c в Bash? Каково его числовое значение? Я видел, что \cx является управляющим символом, но как насчет простого \c? Кажется, что:

echo -e "Hello World\c"

и

echo -en "Hello World"

эквивалентны. Однако Python не использует его в качестве escape-символа, и он отсутствует во всех списках escape-символов, которые я нашел. Это характерное для Bash поведение?


person Keith Pinson    schedule 22.08.2011    source источник
comment
я попробовал это в c, и он печатает c на экране codepad.org/sBWJfPkc   -  person Anuj Kaithwas    schedule 16.12.2013


Ответы (4)


На самом деле это характерно для некоторых версий echo (я почти уверен, что \c пришла от SysV, а версия -n была BSD-измом).

Это просто означает, что не выводить завершающую новую строку.

person paxdiablo    schedule 22.08.2011

См. справочную страницу по эхо или раздел по эхо в раздел "Встроенные модули Bash" руководства по Bash:

echo интерпретирует следующие управляющие последовательности:

...
\c
подавлять дальнейший вывод

person Andrew Clark    schedule 22.08.2011
comment
Спасибо за ссылки и подтверждение ответа paxdiablo. - person Keith Pinson; 23.08.2011
comment
стоит отметить, что \c не распознается, если -e не действует. - person Ahmed Hegazy; 24.11.2014

Это управляющий символ «Конец текста»; он информирует оболочку о том, что достигнут конец текста.

Не совсем уверен, что это актуально, но могу ошибаться.

вот документ:

http://en.wikipedia.org/wiki/ASCII#ASCII_control_characters

и:

http://en.wikipedia.org/wiki/End-of-text_character

person Russ Clarke    schedule 22.08.2011
comment
CTRL-C — это символ ETX, но он имеет мало общего с этим конкретным случаем, иначе FF будет \l вместо \f, новая строка будет \j, а не \n и так далее. - person paxdiablo; 23.08.2011
comment
Я не понимаю, что вы имеете в виду, \c это ETX, я же сказал - что такое FF? - person Russ Clarke; 23.08.2011
comment
Привет @Russ C, я ценю ответ. Однако похоже, что @paxdiablo прав. Например, попробуйте: echo -e "Hello World\03" (в приведенной вами ссылке числовое значение ETX указано как 3). Это не дает того же результата, что и echo -e "Hello World\c". - person Keith Pinson; 23.08.2011
comment
Без проблем; рад, что у вас есть решение! Я не думал, что \c может быть интерпретирован как шестнадцатеричный 12, просто это был управляющий символ. - person Russ Clarke; 23.08.2011

Можете ли вы обновить свой вопрос, указав немного больше контекста о том, как используется \c?

Вы можете использовать \c для экранирования управляющих символов, которые вы можете, скажем, записать в файл или передать в качестве входных данных для другой команды.

Это напишет в терминал текст «какая-то команда», за которым следует двоичный ctrl-d (ascii 0x4):

echo some control string $'\cd' 

См. полный список escape-символов на справочной странице bash: http://linux.die.net/man/1/bash

person Rian Sanderson    schedule 22.08.2011