Bagaimana cara memberi tahu bash bahwa garis berlanjut ke baris berikutnya

101

Dalam skrip bash yang saya dapatkan dari programmer lain, beberapa baris melebihi 80 kolom. Karakter atau benda apa yang akan ditambahkan ke baris untuk menunjukkan bahwa baris tersebut berlanjut ke baris berikutnya?

Buka jalannya
sumber
Lihat diskusi tambahan di stackoverflow.com/questions/18599711/…
enharmonic

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.

Guillaume
sumber
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
chepner
sumber
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.

Jingguo Yao
sumber
2
Terima kasih telah menunjukkan bagian "karakter terakhir". Saya agak frustrasi melacak bug ini dengan tepat.
Jason