Saya mencoba menulis fungsi yang mengembalikan string yang terdiri dari dua bagian:
- opsi beralih
- nama file dengan spasi.
Masalah saya adalah: Bagaimana cara mengutip agar dapat meneruskan hasilnya ke program lain?
#!/bin/bash
getOption() {
echo "-C $1"
}
# prints first lines of man page of cp (copy)
man $(getOption "$1") cp | head -10
Dalam sampel ini saya mencoba meneruskan file konfigurasi khusus man
. Dengan asumsi snippet di atas dinamai run.sh
, konfigurasi yang disesuaikan dinamai my man.conf
dan keduanya berada di direktori yang sama saya mendapatkan kesalahan ini:
$ ./run.sh "my man.conf"
my: No such file or directory
Warning: cannot open configuration file my
# output from man for man…
Seperti yang ditunjukkan glenn jackman : Saya kehilangan satu titik dokumen Bash
Akar masalah yang dijelaskan di atas adalah bahwa Anda memerlukan cara untuk mempertahankan setiap argumen sebagai kata yang terpisah, bahkan jika argumen itu berisi spasi. Harga tidak akan melakukannya, tetapi sebuah array akan melakukannya.
Jadi ruang dipertahankan saat memperbarui ke
#!/bin/bash
args=("")
addOption() {
args+=(-C "$1")
return 0
}
$(addOption "$1")
man "${args[@]}" cp | head -10