Bagaimana Anda menggunakan garis kelanjutan bash?
Saya menyadari bahwa Anda dapat melakukan ini:
echo "continuation \
lines"
>continuation lines
Namun, jika Anda memiliki kode indentasi, itu tidak berfungsi dengan baik:
echo "continuation \
lines"
>continuation lines
bash
line
indentation
PyRulez
sumber
sumber
Jawaban:
Inilah yang mungkin Anda inginkan
Jika ini membuat dua argumen untuk digemakan dan Anda hanya ingin satu, maka mari kita lihat penggabungan string. Dalam bash, menempatkan dua string di samping satu sama lain bersambung:
Jadi garis kelanjutan tanpa indentasi adalah salah satu cara untuk memecah string:
Tetapi ketika sebuah indent digunakan:
Anda mendapatkan dua argumen karena ini bukan lagi gabungan.
Jika Anda ingin string tunggal yang melintasi garis, sementara membuat indentasi tetapi tidak mendapatkan semua ruang itu, satu pendekatan yang dapat Anda coba adalah dengan membuang baris lanjutan dan menggunakan variabel:
Ini akan memungkinkan Anda untuk memiliki kode indentasi bersih dengan mengorbankan variabel tambahan. Jika Anda membuat variabel lokal, itu tidak boleh terlalu buruk.
sumber
s="string no. 1" s+="string no. 2" s+=" string no. 3" echo "$s"
Di sini, dokumen dengan
<<-HERE
terminator berfungsi baik untuk string teks multi-baris yang indentasi. Ini akan menghapus semua tab utama dari dokumen di sini. (Terminator saluran masih akan tetap.)Lihat juga http://ss64.com/bash/syntax-here.html
Jika Anda perlu melestarikan beberapa, tetapi tidak semua, memimpin spasi putih, Anda dapat menggunakan sesuatu seperti
atau mungkin gunakan
tr
untuk menghilangkan baris baru:(Baris kedua memiliki tab dan spasi di depan; tab akan dihapus oleh operator dasbor sebelum terminator heredoc, sedangkan ruang akan dipertahankan.)
Untuk membungkus string kompleks panjang melalui banyak garis, saya suka
printf
:Ini juga berfungsi dengan baik dalam konteks di mana Anda ingin menanamkan potongan skrip shell nontrivial dalam bahasa lain di mana sintaks bahasa host tidak akan membiarkan Anda menggunakan dokumen di sini, seperti dalam a
Makefile
atauDockerfile
.sumber
printf
contoh pertama juga sekarang.)Anda dapat menggunakan array bash
kemudian
ada ruang ekstra, karena (setelah manual bash):
Jadi siapkan
IFS=''
untuk menyingkirkan ruang ekstrasumber
Dalam skenario tertentu memanfaatkan kemampuan gabungan Bash mungkin tepat.
Contoh:
Dari bagian PARAMETER halaman Bash Man:
sumber
Saya menemukan situasi di mana saya harus mengirim pesan panjang sebagai bagian dari argumen perintah dan harus mematuhi batasan panjang garis. Perintahnya terlihat seperti ini:
Cara saya menyelesaikan ini adalah dengan memindahkan pesan sebagai dokumen di sini (seperti yang disarankan @tripleee). Tapi dokumen di sini menjadi stdin, jadi perlu dibaca kembali, saya pergi dengan pendekatan di bawah ini:
Ini memiliki keunggulan yang
$message
dapat digunakan tepat sebagai string konstan tanpa spasi tambahan atau jeda baris.Perhatikan bahwa baris pesan aktual di atas diawali dengan
tab
karakter masing-masing, yang dilucuti oleh dokumen di sini sendiri (karena penggunaan<<-
). Masih ada jeda baris di akhir, yang kemudian digantidd
dengan spasi.Perhatikan juga bahwa jika Anda tidak menghapus baris baru, mereka akan muncul seperti saat
"$message"
diperluas. Dalam beberapa kasus, Anda mungkin dapat mengatasinya dengan menghapus tanda kutip ganda di sekitar$message
, tetapi pesan tidak akan lagi menjadi argumen tunggal.sumber
Kelanjutan garis juga dapat dicapai melalui penggunaan sintaks yang pintar.
Dalam hal
echo
:Dalam hal vars:
Pendekatan lain dalam kasus vars:
Voila!
sumber
Anda bisa memisahkannya dengan baris baru (tanpa menggunakan garis miring terbalik) seperti yang diperlukan dalam lekukan sebagai berikut dan hanya strip baris baru.
Contoh:
Atau jika itu adalah definisi variabel, baris baru akan secara otomatis dikonversi ke spasi. Jadi, lepaskan ruang ekstra hanya jika berlaku.
sumber
Ini tidak persis apa yang diminta pengguna, tetapi cara lain untuk membuat string panjang yang membentang beberapa baris adalah dengan menambahkannya secara bertahap, seperti:
Jelas dalam hal ini akan lebih mudah untuk membangunnya sekali jalan, tetapi gaya ini bisa sangat ringan dan dapat dimengerti ketika berhadapan dengan string yang lebih panjang.
sumber
Coba dengan kutipan tunggal dan merangkai string:
Catatan: rangkaian termasuk spasi putih.
sumber
echo
jika Anda memilikix=
, Anda akan mendapatkan error:lines: command not found
.Bergantung pada jenis risiko apa yang akan Anda terima dan seberapa baik Anda tahu dan mempercayai data, Anda dapat menggunakan interpolasi variabel sederhana.
sumber
Ini mungkin tidak benar-benar menjawab pertanyaan Anda, tetapi Anda mungkin tetap merasa berguna.
Perintah pertama membuat skrip yang ditampilkan oleh perintah kedua.
Perintah ketiga membuat skrip itu dapat dieksekusi.
Perintah keempat memberikan contoh penggunaan.
Perhatikan bahwa jika Anda benar-benar ingin menggunakan skrip ini, lebih masuk akal untuk memindahkan skrip yang dapat dieksekusi ke dalam
~/bin
sehingga skrip tersebut akan berada di jalur Anda.Periksa referensi python untuk perincian tentang cara
textwrap.dedent
kerjanya.Jika penggunaan
$'...'
atau"$(...)"
membingungkan Anda, ajukan pertanyaan lain (satu per konstruksi) jika belum ada satu. Mungkin bagus untuk memberikan tautan ke pertanyaan yang Anda temukan / tanyakan sehingga orang lain akan memiliki referensi yang ditautkan.sumber