Bagaimana cara menggunakan variabel Bash (string) yang berisi tanda kutip dalam suatu perintah?


Jawaban:


56

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:

FLAGS=(--archive --exclude="foo bar.txt")
rsync "${FLAGS[@]}" dir1 dir2

Jezus Suci berhasil!
Slawomir


-2

Saya tidak melihat masalah:

$ FLAGS='--archive --exclude="foo bar.txt"'
$ echo $FLAGS
--archive --exclude="foo bar.txt"

Mungkin Anda perlu mengutip lagi nilainya:

$ rsync "$FLAGS" dir1 dir2

5
echotidak menunjukkan apa yang Anda pikirkan. Coba printargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"lihat mengapa kedua opsi ini tidak berfungsi.
Gordon Davisson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.