'echo' bez znaku nowego wiersza w skrypcie powłoki
Mam problem z echo
w moim skrypcie:
echo -n "Some string..."
Druki
-n Some string...
I przechodzi do następnej linii. W konsoli działa poprawnie bez nowej linii:
Some string...
9 answers
Istnieje wiele wersji polecenia echo
, o różnych zachowaniach. Najwyraźniej powłoka użyta w skrypcie używa wersji, która nie rozpoznaje -n
.
Polecenie printf
ma znacznie bardziej spójne zachowanie. {[0] } nadaje się do prostych rzeczy, takich jak echo hello
, ale proponuję użyć printf
do wszystkiego bardziej skomplikowanego.
Na jakim systemie jesteś i jakiej powłoki używa Twój skrypt?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 18:51:56
bash
posiada" wbudowane " polecenie o nazwie "echo":
$ type echo
echo is a shell builtin
Dodatkowo, istnieje polecenie" echo", które jest właściwym wykonywalnym (tj. widełki powłoki i execs /bin/echo
, w przeciwieństwie do interpretacji echo
i jej wykonania):
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
Zachowanie echo
'S WRT do \c
i -n
jest różne. Najlepiej jest użyć printf
, który jest dostępny na czterech różnych smakach * NIX, na które patrzyłem:
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-23 21:22:05
Spróbuj z
echo -e "Some string...\c"
Działa dla mnie zgodnie z oczekiwaniami(jak zrozumiałem z twojego pytania).
Zauważ, że otrzymałem tę informację ze strony man
. Strona man
zauważa również, że powłoka może mieć własną wersję echo
i nie jestem pewien, czy bash
ma własną wersję.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 12:29:11
Aby to osiągnąć, istnieją zasadniczo dwie metody, których często używam:
1. za pomocą kursor escape character (\c
) with echo -e
przykład :
for i in {0..10..2}; do
echo -e "$i \c"
done
# 0 2 4 6 8 10
-
-e
flaga włączaE znaki scape w łańcuchu. -
\c
przynosiC ursor z powrotem do bieżącej linii.
lub
2. za pomocą printf
polecenie
przykład :
for ((i = 0; i < 5; ++i)); do
printf "$i "
done
# 0 1 2 3 4
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-26 09:29:45
Jeśli użyjesz echo wewnątrz if z innymi poleceniami, takimi jak" read", może zignorować to ustawienie i i tak przeskoczy do nowej linii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 20:20:03
Tylko dla najpopularniejszego Linuksa Ubuntu
& bash
:
-
Sprawdź, której powłoki używasz? Głównie poniżej działa, else zobacz to :
echo $0
-
Jeśli powyższe wydruki
bash
, to poniżej będzie działać:printf "hello with no new line printed at end"
Lubecho -n "hello with no new line printed at end"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Wierzę, że teraz drukowanie wyjściowe jak poniżej
~ echo -e "String1\nString2"
String1
String2
Możesz użyć xargs
, aby uzyskać wielowierszowy stdout w tej samej linii.
~ echo -e "String1\nString2" | xargs
String1 String2
~
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-25 09:26:18
enable -n echo
echo -n "Some string..."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-16 09:29:01
Kiedy piszesz skrypt shell zawsze umieść pierwszą linijkę jako #!/ usr / bin / ENV bash . Powłoka ta nie pomija ani nie manipuluje sekwencjami escape. ex echo " This is first \N line" drukuje to jest pierwsza linia \N.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-24 12:09:02