Jakiej implementacji powłoki bourne używasz? Jeśli bashdziałam w trybie powłoki Bourne'a, działa tutaj dobrze. Poza tym jest mało prawdopodobne, że tak naprawdę używasz powłoki Bourne'a jako interaktywnej powłoki, prawda?
Istnieje wiele wersji echopolecenia o różnych zachowaniach. Najwyraźniej powłoka użyta w skrypcie używa wersji, która nie rozpoznaje -n.
printfKomenda ma znacznie bardziej konsekwentne zachowanie. echojest w porządku dla prostych rzeczy, takich jak echo hello, ale sugeruję używanie printfdo czegokolwiek bardziej skomplikowanego.
Z jakiego systemu korzystasz i jakiej powłoki używa Twój skrypt?
Dodatkowo istnieje polecenie „echo”, które jest właściwym plikiem wykonywalnym (tzn. Powłoka rozwidla i wykonuje /bin/echo, w przeciwieństwie do interpretacji echoi wykonywania):
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856Jul212011/bin/echo
Zachowanie obu echoWRT \ci -nróżni się. Najlepiej jest użyć printf, który jest dostępny w czterech różnych smakach * NIX, na które patrzyłem:
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
Działa to dla mnie zgodnie z oczekiwaniami (jak zrozumiałem z twojego pytania).
Zauważ, że mam te informacje ze manstrony. manStrona zauważa również, że powłoka może mieć swoją własną wersję echo, a nie jestem pewien, czy bashma własną wersję.
+1 za wskazanie mi właściwego kierunku, chociaż echo, które nie rozpoznaje opcji -ne prawdopodobnie nie rozpoznaje opcji -e (ani nie potrzebuje), więc prawdopodobnie powinieneś po prostu powiedzieć echo "some string...\c"zamiast tego. Jeśli jednak potrzebujesz obsługiwać wiele wariantów bash z bardzo różniącymi się poleceniami echa, prawdopodobnie lepiej jest użyć printf lub musisz sprawdzić możliwości poleceń echa za pomocą czegoś podobnego [ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"(przynajmniej bash obsługuje także \ c, więc nie musisz używać -n opcja, ale potrzebujesz b-e dla bash)
Kiedy idziesz i piszesz, skrypt powłoki zawsze umieszczaj pierwszy wiersz jako #! / Usr / bin / env bash. Ta powłoka nie pomija ani nie manipuluje sekwencjami ucieczki. ex echo „To jest pierwsza \ n linia” drukuje To jest pierwsza \ n linia.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
bash
działam w trybie powłoki Bourne'a, działa tutaj dobrze. Poza tym jest mało prawdopodobne, że tak naprawdę używasz powłoki Bourne'a jako interaktywnej powłoki, prawda?