У меня проблема с echo
моим скриптом:
echo -n "Some string..."
печать
-n Some string...
и переходит на следующую строку. В консоли работает корректно без перевода строки:
Some string...
shell
command-line
sh
QWERTZ
источник
источник
bash
в режиме оболочки Bourne, здесь все работает нормально. Кроме того, маловероятно, что вы действительно используете оболочку Борна в качестве интерактивной оболочки, не так ли?echo -ne "text without new line: "; echo "some text";
Ответы:
Существует несколько версий
echo
команды с различным поведением. Очевидно оболочка, используемая для вашего скрипта, использует версию, которая не распознает-n
.У
printf
команды гораздо более последовательное поведение.echo
хорошо для простых вещей, какecho hello
, но я предлагаю использоватьprintf
для чего-то более сложного.На какой системе вы работаете, и какую оболочку использует ваш скрипт?
источник
#!/bin/bash
это работало. Обычно я работаю с Bash.printf
.echo
всегда добавляет новые строки ... Обходной путь в лучшем случае дрянной.%
ваша командная строка . Попробуйте это и посмотрите внимательно:printf hello; sleep 5
bash
имеет «встроенную» команду под названием «эхо»:Кроме того, есть команда «echo», которая является надлежащим исполняемым файлом (то есть оболочка разветвляется и исполняется
/bin/echo
, в отличие от ее интерпретацииecho
и выполнения):Поведение любого из
echo
WRT зависит от\c
и-n
меняется. Ваш лучший выбор - использоватьprintf
четыре варианта * NIX, которые я рассмотрел:источник
Попробуй с
У меня работает как положено (как я понял из вашего вопроса).
Обратите внимание, что я получил эту информацию со
man
страницы. Наman
странице также отмечается, что оболочка может иметь свою собственную версиюecho
, и я не уверен, чтоbash
имеет свою собственную версию.источник
echo "some string...\c"
вместо этого. Однако, если вам нужно поддерживать несколько вариантов bash с дико отличающимися командами echo, вам, вероятно, лучше использовать printf, или вам нужно проверять возможности команд echo с чем-то вроде[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(по крайней мере, bash также поддерживает \ c, так что нет необходимости использовать -n вариант, но вам нужен -e для bash)Для достижения этого есть два основных метода, которые я часто использую:
1. Используя escape-символ курсора (
\c
) сecho -e
Пример :
-e
флаг включает символы E scape в строке.\c
приносит C ursor назад к текущей строке.ИЛИ
2. Используя
printf
командуПример :
источник
Если вы используете echo внутри if с другими командами, такими как «read», он может игнорировать настройку и в любом случае перейдет на новую строку.
источник
Просто для самого популярного Linux
Ubuntu
и этоbash
:Проверьте, какую оболочку вы используете? Главным образом ниже работает, еще посмотрите это :
echo $0
Если выше печатает
bash
, то ниже будет работать:printf "hello with no new line printed at end"
ИЛИ
echo -n "hello with no new line printed at end"
источник
Я верю, что сейчас ваша выходная печать, как показано ниже
Вы можете использовать,
xargs
чтобы получить многострочный стандартный вывод в той же строке.источник
Когда вы пишете сценарий оболочки, всегда ставьте первую строку как #! / Usr / bin / env bash. Эта оболочка не опускает и не управляет escape-последовательностями. ex echo "Это первая \ n строка" печатает Это первая \ n строка.
источник
источник