эхо-подавление новой строки

Почему $echo '-n' не пишет -n на терминале, хотя -n пишется в одинарных кавычках?


person Happy Mittal    schedule 15.04.2010    source источник
comment
Какой язык вы используете?   -  person thecoshman    schedule 15.04.2010
comment
Я предположил, что это вопрос синтаксиса оболочки (например, bash или что-то еще).   -  person Pointy    schedule 15.04.2010
comment
@tripleee - я не уверен, что этот вопрос является дубликатом процитированного вопроса. Вопрос в теле, кажется, отличается от титульного дайджеста. Не могли бы вы взглянуть на него еще раз?   -  person jww    schedule 26.04.2018
comment
ss64.com/bash/echo.html   -  person JJFord3    schedule 08.01.2019


Ответы (6)


Поскольку кавычки обрабатываются оболочкой, а команда echo получает простое -n. Если вы хотите повторить -n, вы можете, например. printf '%s\n' -n

person laalto    schedule 15.04.2010
comment
жаль, что -- (конец опций) не поддерживается :( - person extraneon; 15.04.2010
comment
Следующие работы с bash: echo -e -n\\c - person Tino; 01.12.2010

Я обнаружил, что в bash работает следующее:

echo -n PRINT_THIS

Итак, вы должны поставить -n на первое место.

person Erik Bitemo    schedule 23.01.2013
comment
ss64.com/bash/echo.html - person JJFord3; 08.01.2019

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

person ghostdog74    schedule 15.04.2010

Вы могли бы попробовать

echo -e '\055n'
person kennytm    schedule 15.04.2010

Кавычки не помогают, потому что... тьфу, это трудно объяснить. Оболочка удаляет кавычки перед выполнением самой команды «echo», поэтому к тому времени они уже не имеют значения.

Попробуй это:

echo - -n

Это не задокументировано как работающее (я использую Ubuntu Linux), но echo почти наверняка встроен в любую оболочку, которую вы используете, поэтому справочная страница в любом случае сомнительна. Это работает для меня. (Я работаю zsh, потому что я очень учтивый и утонченный).

редактировать: похоже, встроенная функция bash edit ведет себя не так. Я не знаю, что предложить; это:

echo '' -n

даст вам «-n», которому предшествует пробел, что (в зависимости от того, что вы делаете) может быть в порядке.

person Pointy    schedule 15.04.2010
comment
Не работает для меня. Выход - -n - person extraneon; 15.04.2010
comment
Для меня это делает › echo - -n - -n - person Greg Reynolds; 15.04.2010
comment
Хм, ну, как я только что отметил в редактировании, это, вероятно, варьируется от оболочки к оболочке. - person Pointy; 15.04.2010
comment
Извини, что я тебя не понял. Можете ли вы объяснить свою точку зрения, пожалуйста? - person Happy Mittal; 15.04.2010
comment
Системы Linux/UNIX поддерживают несколько интерпретаторов командной строки (оболочек). Команда echo обычно встроена в каждую из них, и точный синтаксис и функции могут различаться. Вероятно, вы используете оболочку по умолчанию, bash, которая не работает так, как моя оболочка (zsh). - person Pointy; 15.04.2010
comment
ss64.com/bash/echo.html - person JJFord3; 08.01.2019

Не тише там:

echo -e 'a-n\b\b\b '
 -n

на удивление это работает:

echo -e '-n\b'
-n

и вот решение, которое я могу объяснить:

echo "foobar" | sed 's/.*/-n/'
-n
person user unknown    schedule 16.04.2010