2016-12-13 2 views
0

Я хочу показать несколько Echos на одной линии. Моя проблема. -не не получится. Мой код прямо сейчас:Как показать несколько эхо на одной линии без -ne?

echo -ne "Not enough Space! Please free " >&2 
echo "scale=2; $((reqSpace - availSpace)) /1024^2" | bc 
echo " more GB" 

Выход:

Not enough Space available! Please free 5 
more GB 

Когда я поставил -ne во второй полосе мой выход:

Not enough Space! Please free (standard_in) 1: syntax error 
more GB 

Как я могу принести все эти эхо на одной линии? или как я могу решить его по-другому? Любые предложения?

+1

'эхо -n' имеет неопределенное поведение, в то время как' эхо -e' определяется таким образом, что требует 'echo' напечатать' -e' на выходе - что сказать, что вы» re в зависимости от поведения вашей оболочки таким образом, который не соответствует стандарту. –

+1

См. [Спецификация POSIX для 'echo'] (http://pubs.opengroup.org/onlinepubs/009695399/utilities/echo.html), в частности раздел ИСПОЛЬЗОВАНИЕ ПРИМЕНЕНИЯ. –

ответ

2

Непосредственная проблема, которую вы имеете здесь, состоит в том, что bc всегда испускает выходной поток в виде текстового потока UNIX, что означает всегда с разделителями новой строки на конце.

Использование подстановки команд для захвата вывода от bc неявно прошивает конечную новую строку, тем самым разрешая это.


Ваша подмена команда просто может быть заменен непосредственно в echo команду:

echo "Not enough Space! Please free $(bc <<<"scale=2; $((reqSpace - availSpace)) /1024^2") more GB" >&2 

Вы могли бы также рассмотреть возможность использования printf вместо:

printf 'Not enough space! Please free %s more GB\n' \ 
    "$(bc <<<"scale=2; $((reqSpace - availSpace)) /1024^2")" >&2 

Это говорит, вы могли также разделите эту новую строку с вывода bc, как это делается здесь с tr:

printf "Not enough Space! Please free " >&2 
echo "scale=2; $((reqSpace - availSpace)) /1024^2" | bc | tr -d '\n' >&2 
echo " more GB" 
+0

Эхо-команда решила мою проблему. Большое спасибо – ChrizZly