Jak powiedzieć bashowi, że linia jest kontynuowana w następnej linii


Odpowiedzi:


130

Znak jest ukośnikiem odwrotnym \

Z instrukcji bash :

Znak odwrotnego ukośnika „\” może być użyty do usunięcia jakiegokolwiek specjalnego znaczenia dla następnego czytanego znaku i kontynuacji wiersza.


dzięki. i jakie są zwykłe ograniczenia w kolumnach skryptu bash?
— Otwórz drogę

bash nie ma interesującego limitu kolumn; dla jasności powinieneś spróbować ograniczyć do 70-80 znaków na kolumnę.
— Habbie

9
@RyanM Lewy ukośnik musi być ostatnim znakiem przed końcem wiersza. Czy NA PEWNO nie ma żadnych spacji po \?
— George,

9
@George Yeah. Nieco więcej błahostek wypluje błąd z ^M. Problem polega na tym, że skrypt został mi przekazany przez kogoś, kto używa systemu Windows. Szybko dos2unixto naprawiłem :)
— RyanM

2
@George Twój komentarz właśnie mnie uratował, miałem spację po \ i nie mogłem dowiedzieć się, co jest nie tak. Twoje zdrowie!
— ffledgling

37

Ogólnie rzecz biorąc, możesz użyć odwrotnego ukośnika na końcu linii, aby polecenie przechodziło do następnej linii. Istnieją jednak przypadki, w których polecenia są niejawnie kontynuowane, a mianowicie, gdy wiersz kończy się tokenem, który nie może zgodnie z prawem zakończyć polecenia. W takim przypadku powłoka wie, że nadchodzi więcej, i ukośnik odwrotny można pominąć. Kilka przykładów:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

Inna, ale powiązana, jest ukryta kontynuacja wewnątrz cudzysłowów. W tym przypadku, bez odwrotnego ukośnika, po prostu dodajesz nową linię do ciągu.

$ x="foo
> bar"
$ echo "$x"
foo
bar

Za pomocą odwrotnego ukośnika ponownie dzielisz wiersz logiczny na wiele wierszy logicznych.

$ x="foo\
> bar"
$ echo "$x"
foobar

Czy istnieje formalna lista takich sytuacji, w których polecenie jest niejawnie kontynuowane w następnej linii? Wydaje mi się, że w pewnych okolicznościach mógłbym zostawić ukośnik odwrotny w ramach warunku [[- ]], ale nie w innych, i próbuję wymyślić zasady.
— Menachem,

16

\wykonuje pracę. Odpowiedź @ Guillaume i komentarz @ George'a jasno odpowiadają na to pytanie. Tutaj wyjaśniam, dlaczego The backslash has to be the very last character before the end of line character.Rozważ to polecenie:

   mysql -uroot \
   -hlocalhost      

Jeśli po nim jest spacja \, kontynuacja linii nie będzie działać. Powodem jest to, że \ usuwa specjalne znaczenie następnego znaku, którym jest spacja, a nie niewidoczny znak nowego wiersza. Znak nowego wiersza znajduje się po spacji, którego nie ma \w tym przykładzie.


2
Dziękuję za zwrócenie uwagi na część dotyczącą „ostatniej postaci”. Trochę frustrowało mnie śledzenie dokładnie tego błędu.
— Jason
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.