2010-04-15 1 views
6

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

+0

На каком языке вы используете? – thecoshman

+0

Я догадался, что это вопрос синтаксиса оболочки (т. Е. Bash или что-то еще). – Pointy

ответ

8

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

+2

Это позор '--' (конец опций) не поддерживается :( – extraneon

+0

Следующие работы с bash: echo -e -n \\ c – Tino

0

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

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

echo - -n 

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

редактировать: ну, кажется, что bashedit встроенный не ведет себя таким образом. Я не знаю, что предложить; это:

echo '' -n 

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

+0

Не работает для меня. Выход '- -n' – extraneon

+0

Для меня это делает > echo - -n - -n –

+0

Хм, как я уже отмечал в редактировании, он, вероятно, варьируется от оболочки до оболочки. – Pointy

2

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

0

Не Quiete есть:

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

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

echo -e '-n\b' 
-n 

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

echo "foobar" | sed 's/.*/-n/' 
-n 
2

я обнаружил, что следующий раз работает в Баш:

echo -n PRINT_THIS 

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