У Bash спробували це:
echo -e "hello\nworld"
Але він не друкує лише новий рядок \n
. Як я можу змусити його друкувати новий рядок?
Я використовую Ubuntu 11.04.
У Bash спробували це:
echo -e "hello\nworld"
Але він не друкує лише новий рядок \n
. Як я можу змусити його друкувати новий рядок?
Я використовую Ubuntu 11.04.
Відповіді:
Ви можете використовувати printf
замість цього:
printf "hello\nworld\n"
printf
має більш послідовну поведінку, ніж echo
. Поведінка echo
сильно відрізняється між різними версіями.
printf %"s\n" hello world
- printf повторно використовувати формат, якщо буде подано занадто багато аргументів
echo
трапляється підтримувати цей -e
варіант.
echo
, -e
він просто надрукований у самому висновку, тому я вважаю, що ця відповідь цілком справедлива, оскільки echo
тут не узгоджується (якщо ми не говоримо про конкретну версію).
Ви впевнені, що перебуваєте в басі? Для мене працює всі чотири способи:
echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world
echo Hello ; echo world
-e
парам не існує у всіх * nix OS
echo $'hello\nworld'
відбитки
hello
world
$''
рядки використовують ANSI C Цитування :
Слова форми обробляються спеціально. Слово розширюється до рядка , а символи , що ухиляються від косої риски, замінюються відповідно до стандарту ANSI C.
$'string'
Ви завжди могли це зробити echo ""
.
напр
echo "Hello"
echo ""
echo "World"
echo ""
працює для мене, і я думаю, що це найпростіша форма для друку нового рядка, навіть якщо це не відповідає безпосередньо на питання. Ура.
echo -en "\n"
.
echo
достатньо, щоб отримати порожній рядок
Спробуйте
echo -e "hello\nworld"
hello
world
працював для мене в nano
редакторі.
На чоловіковій сторінці:
-e
включити інтерпретацію відхилень від косої риски
Не маючи шансу, що хтось опинився, як бив головою об стіну, намагаючись зрозуміти, чому сценарій колеги не друкує нові рядки, зверніть увагу на це ->
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
echo $(GET_RECORDS);
Як і у вищесказаному, власне запуск методу сам по собі може бути загорнутий у відлуння, яке витісняє будь-яке відлуння, яке може бути в самому методі. Очевидно, що я поливав це для стислості, це було не так просто помітити!
Потім ви можете повідомити своїх товаришів, що кращим способом виконання функцій буде такий:
#!/bin/bash
function GET_RECORDS()
{
echo -e "starting\n the process";
}
GET_RECORDS;
POSIX 7 на ехо
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
не визначено і зворотні косої риси визначено реалізацією:
Якщо перший операнд дорівнює -n, або якщо будь-який з операндів містить символ <зворотний штрих>, результати визначаються реалізацією.
якщо ви не маєте додаткового розширення XSI.
Тож рекомендую використовувати printf
замість цього, що добре вказано:
Операнд формату використовуватиметься як рядок формату, описаний у нотації про формат файлу XBD [...]
\ n <newline> Перемістіть позицію друку на початок наступного рядка.
Також пам’ятайте, що Ubuntu 15.10 та більшість дистрибутивів реалізують echo
як:
help echo
which echo
що може призвести до певної плутанини.
Просто введіть
echo
щоб отримати новий рядок
str='hello\nworld'
$ echo | sed "i$str"
hello
world
Ви також можете зробити:
echo "hello
world"
Це працює як всередині скрипту, так і з командного рядка.
У командному рядку натисніть Shift+Enter щоб зробити розриви рядка всередині рядка.
Це працює для мене на моєму macOS та моєму Ubuntu 18.04
Ще один запис тут для тих, хто не змусив його працювати ні з одним із цих рішень, і їм потрібно отримати зворотні значення від своєї функції:
function foo()
{
local v="Dimi";
local s="";
.....
s+="Some message here $v $1\n"
.....
echo $s
}
r=$(foo "my message");
echo -e $r;
Тільки цей трюк працював у linux, над яким я працював над цим bash:
GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)
Сподіваюся, це допомагає комусь із подібною проблемою.
Мій сценарій:
echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings
Вихід:
WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file:
На моєму баш сценарії я злітав як ти, поки я тільки що не намагався:
echo "WARNING : $warningsFound WARNINGS FOUND:
$warningStrings"
Просто натисніть клавішу, куди ви хочете вставити цей стрибок. Вихід зараз:
WARNING : 2 WARNINGS FOUND:
Warning, found the following local orphaned signature file:
Ви також можете використовувати ехо з брекетами,
$ (echo hello; echo world)
hello
world
echo hello; echo world
Це краще зробити так, як
x="\n"
echo -ne $x
-e опція буде інтерпретувати зворотні риски для послідовності евакуації
-n опція видалить у вихідному рядку зворотний новий рядок
PS: команда echo має ефект завжди включати у вихідний новий рядок, тому n потрібно, щоб вимкнути цю річ (і зробити її менш заплутаною)
Існує нове розширення параметр доданий в bash 4.4
який інтерпретує керуючі послідовності:
${parameter@operator} - E operator
Розширення - це рядок, який є значенням параметра з розширеними послідовностями зворотної косої лінії, як і в
$'…'
механізмі цитування.
$ foo='hello\nworld'
$ echo "${foo@E}"
hello
world
Якщо ви пишете сценарії, і ви будете повторювати нові рядки як частина інших повідомлень кілька разів, приємним кросплатформенним рішенням є встановлення буквальної нової лінії в змінну на зразок:
newline='
'
echo "first line$newlinesecond line"
echo "Error: example error message n${newline}${usage}" >&2 #requires usage to be defined
Іноді ви можете пропустити кілька рядків, розділених пробілом, і це буде інтерпретуватися як \n
.
Наприклад, коли використовується сценарій оболонки для багаторядкових повідомлень:
#!/bin/bash
notify-send 'notification success' 'another line' 'time now '`date +"%s"`
\n
. Це трактується як окремий аргумент до програми, і сама програма може відображати цей аргумент у новому рядку, але це не означає, що він був перетворений \n
в будь-який момент і повністю залежить від програми.
Це мене туди….
outstuff=RESOURCE_GROUP=[$RESOURCE_GROUP]\\nAKS_CLUSTER_NAME=[$AKS_CLUSTER_NAME]\\nREGION_NAME=[$REGION_NAME]\\nVERSION=[$VERSION]\\nSUBNET-ID=[$SUBNET_ID]
printf $outstuff
Врожайність:
RESOURCE_GROUP=[akswork-rg]
AKS_CLUSTER_NAME=[aksworkshop-804]
REGION_NAME=[eastus]
VERSION=[1.16.7]
SUBNET-ID=[/subscriptions/{subidhere}/resourceGroups/makeakswork-rg/providers/Microsoft.Network/virtualNetworks/aks-vnet/subnets/aks-subnet]
Додаткове рішення:
У випадках, вам доведеться повторювати багаторядковий довгий вміст (наприклад, код / конфігурації)
Наприклад :
echo -e
,
printf
може мати деяке обмеження
Ви можете використовувати якийсь спеціальний знак як заповнювач як розрив рядка (наприклад ~
) та замінити його після створення файлу за допомогоюtr
echo ${content} | tr '~' '\n' > $targetFile
необхідно звернутися до іншої програми ( tr
), яка повинна бути добре IMO.