У меня проблема с echo
в моем script:
echo -n "Some string..."
печатает
-n Some string...
и переходит к следующей строке. В консоли он работает без новой строки:
Some string...
У меня проблема с echo
в моем script:
echo -n "Some string..."
печатает
-n Some string...
и переходит к следующей строке. В консоли он работает без новой строки:
Some string...
Существует несколько версий команды echo
с разными поведением. По-видимому, оболочка, используемая для вашего script, использует версию, которая не распознает -n
.
Команда printf
имеет гораздо более последовательное поведение. echo
отлично подходит для простых вещей, таких как echo hello
, но я предлагаю использовать printf
для чего-то более сложного.
В какой системе вы работаете, и какая оболочка использует ваш script?
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"
Попробуйте
echo -e "Some string...\c"
Он работает для меня, как и ожидалось (как я понял из вашего вопроса).
Обратите внимание, что я получил эту информацию со страницы man
. Страница man
также отмечает, что оболочка может иметь свою собственную версию echo
, и я не уверен, имеет ли bash
свою собственную версию.
Если вы используете 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"
Когда вы идете и пишете свой скрипт оболочки, всегда ставьте первую строку как #!/Usr/bin/env bash. Эта оболочка не опускает и не управляет escape-последовательностями. ex echo "Это первая \n строка" печатает Это первая \n строка.