Jawaban singkat: lihat BashFAQ # 50 ("Saya mencoba untuk menempatkan perintah dalam variabel, tetapi kasus kompleks selalu gagal!").
Jawaban panjang: Menempatkan perintah (atau bagian dari perintah) ke dalam variabel dan kemudian mengeluarkannya kembali menjadi rumit. Ketika shell memperluas variabel pada baris perintah, jika variabel dalam tanda kutip ganda itu tidak diuraikan; jika itu tidak ada dalam tanda kutip, spasi di dalamnya diuraikan sebagai argumen istirahat, tetapi kutipan dan melarikan diri tidak diuraikan. Dalam kedua kasus tersebut, menempatkan tanda kutip pada nilai variabel tidak ada gunanya.
Biasanya, cara terbaik untuk melakukan hal semacam ini adalah menggunakan array daripada variabel teks sederhana:
echotidak menunjukkan apa yang Anda pikirkan. Coba printargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"lihat mengapa kedua opsi ini tidak berfungsi.
Jawaban:
Jawaban singkat: lihat BashFAQ # 50 ("Saya mencoba untuk menempatkan perintah dalam variabel, tetapi kasus kompleks selalu gagal!").
Jawaban panjang: Menempatkan perintah (atau bagian dari perintah) ke dalam variabel dan kemudian mengeluarkannya kembali menjadi rumit. Ketika shell memperluas variabel pada baris perintah, jika variabel dalam tanda kutip ganda itu tidak diuraikan; jika itu tidak ada dalam tanda kutip, spasi di dalamnya diuraikan sebagai argumen istirahat, tetapi kutipan dan melarikan diri tidak diuraikan. Dalam kedua kasus tersebut, menempatkan tanda kutip pada nilai variabel tidak ada gunanya.
Biasanya, cara terbaik untuk melakukan hal semacam ini adalah menggunakan array daripada variabel teks sederhana:
sumber
eval adalah pilihan lain:
Lihat juga:
sumber
Saya tidak melihat masalah:
Mungkin Anda perlu mengutip lagi nilainya:
sumber
echo
tidak menunjukkan apa yang Anda pikirkan. Cobaprintargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"
lihat mengapa kedua opsi ini tidak berfungsi.