Skrip shell: Kelilingi variabel dengan tanda kutip saat meneruskan ke array?

Saya memiliki skrip shell yang sebagiannya melakukan ini:

bundle exec rake parallel[${@:3}];

${@:3} bersifat dinamis dan bisa berupa -p thread11 THREAD=test_thread11, atau hanya @test.feature

Tugas rake mengharapkan satu argumen tetapi apa pun yang saya coba, saya tidak bisa membuat skrip shell mengapit variabel dengan tanda kutip jadi alih-alih mengirim sesuatu seperti

bundel exec rake paralel["-p thread11 THREAD=test_thread11"]

Saya akhirnya mengirim

bundel exec rake paralel[-p thread11 THREAD=test_thread11]

Yang menyebabkan tugas rake gagal.

Dengan pernyataan echo saya bisa mendapatkan hasil yang benar dengan melakukan

echo "Akan menggunakan perintah run" bundle exec rake parallel["'${@:3}'"]

Apakah mungkin untuk mengapit nilai variabel dengan tanda kutip saat meneruskannya ke tugas?


person MisterMan    schedule 15.10.2019    source sumber


Jawaban (1)


Tampaknya Anda ingin menggunakan "${*:3}" sebagai gantinya, yang akan menghasilkan satu kata yang dibatasi spasi dari 3 argumen daripada serangkaian kata individual, satu kata per argumen.

person chepner    schedule 15.10.2019
comment
Terima kasih! Sepertinya begitu, bisakah Anda memberi tahu saya apa sebutan notasi itu? Saya baru mengenal skrip shell jadi saya akan membacanya. - person MisterMan; 15.10.2019
comment
@ dan * adalah dua parameter khusus yang berbeda (cari istilah tersebut di halaman manual). $* berperilaku lebih normal, sedangkan $@ memiliki perilaku khusus ketika dikutip (sehingga tidak boleh digunakan tanpa tanda kutip dan jarang digunakan dalam string yang dikutip lebih besar). - person chepner; 15.10.2019