'echo' без новой строки в оболочке script

У меня проблема с echo в моем script:

echo -n "Some string..."

печатает

-n Some string...

и переходит к следующей строке. В консоли он работает без новой строки:

Some string...

Ответ 1

Существует несколько версий команды echo с разными поведением. По-видимому, оболочка, используемая для вашего script, использует версию, которая не распознает -n.

Команда printf имеет гораздо более последовательное поведение. echo отлично подходит для простых вещей, таких как echo hello, но я предлагаю использовать printf для чего-то более сложного.

В какой системе вы работаете, и какая оболочка использует ваш script?

Ответ 2

bash имеет встроенную команду под названием "echo":

$ type echo
echo is a shell builtin

Кроме того, существует команда "эхо", которая является надлежащим исполняемым файлом (то есть оболочкой forks и execs /bin/echo, в отличие от интерпретации echo и ее выполнения):

$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21  2011 /bin/echo

Поведение либо echo WRT до \c, и -n меняется. Лучше всего использовать printf, который доступен на четырех разных * NIX-ароматах, на которые я смотрел:

$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"

Ответ 3

Попробуйте

echo -e "Some string...\c"

Он работает для меня, как и ожидалось (как я понял из вашего вопроса).

Обратите внимание, что я получил эту информацию со страницы man. Страница man также отмечает, что оболочка может иметь свою собственную версию echo, и я не уверен, имеет ли bash свою собственную версию.

Ответ 4

Если вы используете echo внутри if с другими командами, например "read", он может игнорировать параметр, и он все равно перейдет к новой строке.

Ответ 5

Просто для самого популярного Linux Ubuntu и его bash:

  1. Проверьте, какую оболочку вы используете? Главным образом ниже работает, еще посмотрите это:

    echo $0

  2. Если выше печатает bash, то ниже будет работать:

    printf "hello with no new line printed at end"
    ИЛИ ЖЕ
    echo -n "hello with no new line printed at end"

Ответ 6

Когда вы идете и пишете свой скрипт оболочки, всегда ставьте первую строку как #!/Usr/bin/env bash. Эта оболочка не опускает и не управляет escape-последовательностями. ex echo "Это первая \n строка" печатает Это первая \n строка.