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.