W skrypcie basha, który otrzymałem od innego programisty, niektóre linie przekroczyły 80 kolumn długości. Jaki znak lub przedmiot należy dodać do wiersza w celu wskazania, że wiersz jest kontynuowany w następnym wierszu?
W skrypcie basha, który otrzymałem od innego programisty, niektóre linie przekroczyły 80 kolumn długości. Jaki znak lub przedmiot należy dodać do wiersza w celu wskazania, że wiersz jest kontynuowany w następnym wierszu?
Odpowiedzi:
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.
^M
. Problem polega na tym, że skrypt został mi przekazany przez kogoś, kto używa systemu Windows. Szybko dos2unix
to naprawiłem :)
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
[[
- ]]
, ale nie w innych, i próbuję wymyślić zasady.
\
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.