mam problem z echo
w moim skryptu:'Echo' bez znaku nowej linii w skrypcie powłoki
echo -n "Some string..."
wydruki
-n Some string...
i przechodzi do następnego wiersza. W konsoli to działa correcly bez nowej linii:
Some string...
mam problem z echo
w moim skryptu:'Echo' bez znaku nowej linii w skrypcie powłoki
echo -n "Some string..."
wydruki
-n Some string...
i przechodzi do następnego wiersza. W konsoli to działa correcly bez nowej linii:
Some string...
Istnieją różne wersje komendy echo
, z różnych zachowań. Najwyraźniej powłoka używana w twoim skrypcie używa wersji, która nie rozpoznaje -n
.
Polecenie printf
ma znacznie bardziej spójne zachowanie. echo
jest w porządku dla prostych rzeczy, takich jak echo hello
, ale sugeruję użycie printf
dla czegoś bardziej skomplikowanego.
Jakiego systemu używasz i jakiej powłoki używa twój skrypt?
Rozpoczynając od linii' #!/bin/bash' zadziałało. Normalnie pracuję z bash. – qwertz
Żałuję, że nie ma odpowiednika Windows w CMD :(O ile widzę, nie ma, tylko obejścia, aby osiągnąć to samo zachowanie –
@kayleeFrye_onDeck: Być może istnieje wersja systemu Windows 'printf' polecenia. –
Spróbuj z
echo -e "Some string...\c"
To działa na mnie jak oczekiwano (jak zrozumiałem z twojego pytania).
Zauważ, że dostałem tę informację ze strony man
. Strona man
również zauważa, że powłoka może mieć własną wersję echo
i nie jestem pewien, czy bash
ma swoją własną wersję.
+1 za wskazanie mnie we właściwym kierunku, chociaż echo, które nie rozpoznaje -na opcja prawdopodobnie nie rozpoznaje opcji -e (ani nie potrzebuje), więc prawdopodobnie chcesz po prostu wymówić "echo" jakiś ciąg ... \ c "zamiast tego. Jeśli jednak potrzebujesz obsługi wielu wariantów bash za pomocą bardzo różniących się poleceń echa, prawdopodobnie lepiej jest użyć printf lub musisz sprawdzić możliwości komend echo z czymś takim jak '[-n" $ (echo -e) "] && echo" sh stuff \ c "|| echo -e "bash stuff \ c" '(przynajmniej bash obsługuje \ c również, więc nie trzeba używać opcji -n, ale potrzebujesz -e dla bash) – Timo
\ c dzięki .. pracował –
bash
ma „wbudowany” polecenie o nazwie „echo”:
$ type echo
echo is a shell builtin
Dodatkowo istnieje „echo” Polecenie to jest właściwy plik wykonywalny (czyli widełki powłoki i execs /bin/echo
, w przeciwieństwie do interpretacji i wykonywania go echo
)
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
zachowanie obu WRT echo
„s \c
i -n
różna. Najprościej jest użyć printf
, która jest dostępna na czterech różnych * nix smakach, że spojrzałem na:
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
Dzięki za masowo do głębi odpowiedz! – Fuser97381
Jeśli używasz echo wewnątrz czy z innych komend, jak „czytać”, to może ignorować ustawienie i tak przeskoczy do nowej linii.
Którą implementację powłoki bourne używasz? Jeśli uruchomię 'bash' w trybie powłoki bourne, działa tutaj dobrze. Poza tym jest mało prawdopodobne, że używasz powłoki firmy Bourne jako powłoki interaktywnej, prawda? – FatalError
na Ubuntu: tekst "echo -ne" bez nowej linii: "; echo "some text"; ' – zsoltii