Bagaimana cara memberi tahu bash bahwa garis berlanjut ke baris berikutnya


Jawaban:


130

Karakternya adalah garis miring terbalik \

Dari manual bash :

Karakter garis miring terbalik '\' dapat digunakan untuk menghilangkan arti khusus untuk pembacaan karakter berikutnya dan untuk kelanjutan baris.


Terima kasih. dan berapa batas biasa dalam kolom skrip bash?
Buka jalan

bash tidak memiliki batas kolom yang menarik; untuk kejelasan, Anda harus mencoba membatasi hingga 70-80 karakter per kolom.
Habbie

9
@RyanM Garis miring terbalik harus menjadi karakter terakhir sebelum karakter baris berakhir. Apakah Anda YAKIN tidak memiliki spasi setelah \?
George

9
@George Ya. Sedikit lebih mengotak-atik kesalahan dengan file ^M. Masalahnya tampaknya skrip itu diberikan kepada saya oleh seseorang yang menggunakan windows. A quick dos2unixfix it :)
RyanM

2
@ George komentar Anda baru saja menyelamatkan saya, saya memiliki spasi setelah \ dan saya tidak tahu apa yang salah. Bersulang!
ffledgling

37

Secara umum, Anda dapat menggunakan garis miring terbalik di akhir baris agar perintah dapat dilanjutkan ke baris berikutnya. Namun, ada kasus di mana perintah dilanjutkan secara implisit, yaitu ketika baris diakhiri dengan token daripada tidak dapat menghentikan perintah secara legal. Dalam hal ini, shell tahu bahwa akan datang lebih banyak, dan garis miring terbalik dapat dihilangkan. Beberapa contoh:

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

# Pipes
$ echo foo |
> cat
foo

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

Berbeda, tetapi terkait, adalah kelanjutan implisit di dalam tanda kutip. Dalam kasus ini, tanpa garis miring terbalik, Anda cukup menambahkan baris baru ke string.

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

Dengan garis miring terbalik, Anda sekali lagi memisahkan baris logika menjadi beberapa baris logika.

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

Apakah ada daftar formal dari situasi seperti itu, di mana perintah secara implisit dilanjutkan ke baris berikutnya? Tampaknya bagi saya bahwa saya bisa membiarkan garis miring terbalik dalam keadaan tertentu dalam kondisi [[- ]]tetapi tidak dalam kondisi lain, dan saya mencoba untuk mencari tahu aturannya.
Menachem

16

\melakukan pekerjaan itu. Jawaban @ Guillaume dan komentar @ George dengan jelas menjawab pertanyaan ini. Di sini saya menjelaskan mengapa The backslash has to be the very last character before the end of line character.Pertimbangkan perintah ini:

   mysql -uroot \
   -host      

Jika ada spasi setelahnya \, kelanjutan baris tidak akan berfungsi. Alasannya adalah \ menghilangkan makna khusus untuk karakter berikutnya yang merupakan spasi bukan karakter feed baris yang tidak terlihat. Karakter baris feed setelah spasi bukan \dalam contoh ini.


2
Terima kasih telah menunjukkan bagian "karakter terakhir". Saya agak frustrasi melacak bug ini dengan tepat.
Jason
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.