Saya menghitung waktu biner khusus dalam bentuk: ./prog --opt1=arg1 --opt2=arg2 --opt3="arg3"
Diperlukan opsi ketiga memiliki argumen yang dikutip. Dalam skrip saya menyimpan semua opsi:
exec=./prog
opts="--opt1=arg1 --opt2=arg2 --opt3=\"arg3\""
Ketika saya mencoba menghitung waktu program, saya mendapatkan kesalahan dengan program saya menguraikan argumen. Saya menduga itu karena ia melihat argumen terakhir sebagai tidak dikutip. Output dari /bin/time
:
\bin\time -v $exec $opts
Error parsing args
(dari program saya)
Command being timed: "./prog --opt1=arg1 --opt2=arg2 --opt3="arg3""
Namun ketika saya salin dan rekat, apa itu klaim perintahnya adalah, itu berjalan dengan baik:
./prog --opt1=arg1 --opt2=arg2 --opt3="arg3"
--mulai baik-baik saja
apa yang /bin/time
lakukan dan bagaimana cara memperbaikinya? Saya kira itu ada hubungannya dengan tanda kutip, seperti mungkin berjalan eval atau sesuatu. Saya tidak yakin apa yang harus saya lakukan.
eval
adalah cara yang salah untuk melakukan ini; ia memiliki reputasi yang pantas untuk menyebabkan bug yang tak terduga (dan kadang-kadang tidak dapat dipahami). Lihat BashFAQ # 50: Saya mencoba untuk menempatkan perintah dalam variabel, tetapi kasus kompleks selalu gagal! (dan banyak jawaban sebelumnya yang menghubungkannya) untuk ide yang lebih baik.