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?
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.
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.
Jawaban:
Karakternya adalah garis miring terbalik
\
Dari manual bash :
sumber
^M
. Masalahnya tampaknya skrip itu diberikan kepada saya oleh seseorang yang menggunakan windows. A quickdos2unix
fix it :)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:
Berbeda, tetapi terkait, adalah kelanjutan implisit di dalam tanda kutip. Dalam kasus ini, tanpa garis miring terbalik, Anda cukup menambahkan baris baru ke string.
Dengan garis miring terbalik, Anda sekali lagi memisahkan baris logika menjadi beberapa baris logika.
sumber
[[
-]]
tetapi tidak dalam kondisi lain, dan saya mencoba untuk mencari tahu aturannya.\
melakukan pekerjaan itu. Jawaban @ Guillaume dan komentar @ George dengan jelas menjawab pertanyaan ini. Di sini saya menjelaskan mengapaThe backslash has to be the very last character before the end of line character.
Pertimbangkan perintah ini: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.sumber