Apakah satu-satunya opsi untuk perluasan perintah bash:
- tanda kutip
$(..)
yang outputnya selalu diuraikan dengan pemisahan string dumb, atau - dikutip
"$(..)"
output siapa yang selalu diteruskan sebagai satu unit?
Saya mencoba meniru di bash fungsi shell ikan yang saya buat untuk digunakan di Mac OS. Fungsi ikan saya selection
https://superuser.com/a/1165855 mengambil pilihan di jendela paling depan dan menampilkan jalur untuk digunakan dalam substitusi perintah seperti ls -l (selection)
. Saya berharap dapat mencapai hal yang sama di bash mungkin sebagai ls -l $(selection)
.
Saya pikir itu adalah masalah mengutip dan jadi mencoba melewati jalur linefeed-delimited ke bash's printf "%q "
. Namun saya menemukan bahwa tidak peduli apa pun kutipan yang saya masukkan output substitusi perintah, itu terbagi di spasi putih.
Contoh sederhana:
$ touch file\ a file\ b
$ ls $( echo "file\ a file\ b" ) # want expansion equiv to: ls 'file a' 'file b'
ls: a: No such file or directory
ls: b: No such file or directory
ls: file\: No such file or directory
ls: file\: No such file or directory
Itu tidak akan menjadi akhir dari dunia jika saya harus menggunakan substitusi perintah yang dikutip seperti ls -l "$(selection)"
tetapi melakukan bahwa output perintah tidak pernah terpecah, tidak pernah memperhatikan pengamatan saya yang cermat. Apakah sintaks backtick yang lama berbeda?
Lucu, bash, Anda punya banyak fitur. Apakah tidak ada yang mengizinkan cmda $(cmdb-that-generates-parameters-for-cmda)
? Atau apakah pengguna bash menghindari spasi atau simbol dalam nama file (seperti binatang) untuk membuat semuanya mudah? Terima kasih atas jawaban apa pun.