Chciałbym utworzyć plik za pomocą polecenia echo i operatora przekierowania, plik powinien składać się z kilku wierszy.
Próbowałem dołączyć nowy ciąg przez „\ n” w ciągu:
echo "first line\nsecond line\nthirdline\n" > foo
ale w ten sposób nie jest tworzony plik z trzema liniami, ale plik z tylko jedną linią i dosłownie zawartością łańcucha.
Jak mogę utworzyć za pomocą tego polecenia plik z kilkoma liniami?
shell
command-line
echo
newlines
Abdul Al Hazred
źródło
źródło
Odpowiedzi:
Poprosiłeś o użycie składni z
echo
poleceniem:(Ale zastanów się także nad inną odpowiedzią, którą otrzymałeś).
W
$'...'
rozwinięciu konstrukt osadzony sekwencji sterujących ANSI.źródło
To, co echo robi ze znakami ucieczki, jest zdefiniowane w implementacji. W wielu implementacjach echa (w tym w większości nowoczesnych) przekazany ciąg znaków nie jest w ogóle domyślnie sprawdzany pod kątem zmian znaczenia.
Dzięki echu dostarczonemu przez GNU bash (jako wbudowane) i niektórym innym wariantom echa, możesz zrobić coś takiego:
Jednak naprawdę brzmi tak, jak chcesz
printf
, co jest bardziej czytelne dla mojego oka, a także bardziej przenośne (ma tę funkcję zdefiniowaną przez POSIX):Możesz również rozważyć użycie dokumentu tutaj :
źródło
echo -en 'text..'
, podczas gdy zaakceptowana odpowiedź nie rozpoznała mojego znaku nowej linii (\n
), toecho -en
zrobiła.Oto kilka innych sposobów tworzenia pliku wielowierszowego za pomocą
echo
polecenia:gdzie drugie i trzecie polecenie używają
>>
operatora przekierowania, co powoduje dołączenie (dodanie) wyniku polecenia do pliku (który powinien już istnieć, do tego momentu).Lub
gdzie nawiasy grupują
echo
polecenia w jeden podproces, który wygląda i działa jak każdy pojedynczy program, który generuje wiele wierszy (jakls
na przykład).Subtelna odmiana powyższego jest
Jest to nieco bardziej wydajne niż druga odpowiedź, ponieważ nie tworzy podprocesu. Jednak składnia jest nieco trudniejsza: zwróć uwagę, że przed i należy wstawić spację
{
i średnik}
.Zobacz Jakie są operatory kontroli i przekierowania powłoki? po więcej informacji.
źródło
Aby dać jeszcze jedną opcję, możesz po prostu nacisnąć Enter (tj. Dosłownie nowy wiersz):
Zauważ, że nie wpisujesz
>
na początku drugiej linii. Jest to wtórny monit powłoki$PS2
, który powłoka drukuje po wpisaniu niekompletnego polecenia (np. W tym przypadku polecenie z niedopasowanym znakiem cudzysłowu).źródło
POSIX 7 mówi, że nie możesz
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
nie jest zdefiniowany, a ukośniki odwrotne są zdefiniowane jako implementacja:chyba że masz opcjonalne rozszerzenie XSI.
printf
Zamiast tego użyj :Oznaczenia Format pliku :
Pamiętaj również, że Ubuntu 15.10 i większość dystrybucji implementuje
echo
oba jako:help echo
which echo
co może prowadzić do zamieszania.
źródło
echo
każdej powłoce dostępnej w systemie będzie wbudowane. Na Ubuntu / bin / sh jest zwykle dash, bash również jest domyślnie. Zsh, rc, mksh, yash, csh, tcsh, ksh93 ... będą miały swoje własne echo z innym zachowaniem. Zauważ, żewhich echo
nie da ci ścieżki echa systemowego we wszystkich powłokach.which
był pierwotnie (w latach 80.) skryptem csh tylko dla użytkowników csh (ładował aliasy z ~ / .cshrc) i nadal jest dostępny w niektórych systemach.which
jest wbudowany w zsh i tcsh.