2014-02-03 10 views
2

В чем разница междуПочему эхо создает новую строку?

echo -n " 
> " 

и

echo -n "" 

Первый из них производит перевод строки в то время как второй нет.

Я бегу GNU Баш, версия 4.2.45 (1) -release (x86_64-рс-Linux-гну)

Edit: Я понимаю, что вход получает строку здесь. Я должен был уточнить этот вопрос. Рассмотрим следующий сценарий, input.sh

#!/bin/bash 
echo -n $1 

Следующая не создает новой строки.

./input.sh " 
> " 
+1

Вы действительно пишете новую линию, поэтому, конечно, она производится. – fedorqui

+0

'-n' означает« не добавлять новую строку », но во втором случае вы пишете один – grebneke

+0

Возможно, вы хотели использовать линию продолжения? –

ответ

1

Расширение комментария @ chepner. Рассмотрим это:

$ set -- " 
" 

$ echo -n "$1" | od -c 
0000000 \n 
0000001 

$ echo -n $1 | od -c 
0000000 

Когда вы покидаете переменной без кавычек, все ведущие или завершающие последовательности пробелов удаляются оболочки. Поэтому bash сбрасывает вашу новую строку, когда вы не указываете $ 1. Это происходит до Вызывается «echo», поэтому дается «echo -n» нет аргументов.

В разделе в руководстве Word Splitting:

Если IFS снята с охраны, или его значение точно <space><tab><newline>, по умолчанию, то последовательности <space>, <tab> и <newline> в начале и в конце результатов предыдущих разложений игнорируются, и любая последовательность символов IFS не в начале и конце служит для разграничения слов.

3

Строка

" 
> " 

имеет символ новой строки в нем, насколько Баш обеспокоен. Флаг -n означает, что эхо не будет печатать дополнительную строку новой строки в конце вашего вывода. Он все равно будет воспроизводить ваш вход, включая новые строки.

Смежные вопросы