Masalahnya adalah $1
di
MYBASENAME="`basename $1`"
tidak dikutip. Gunakan ini sebagai gantinya:
MYBASENAME="$(basename "$1")"
Anda melewatkan satu set kutipan!
MYBASENAME="`basename \"$1\"`"
Itu akan memperbaiki masalah Anda.
Dalam kasus di mana penugasan adalah substitusi perintah tunggal, Anda tidak perlu mengutip substitusi perintah. Shell tidak melakukan pemisahan kata untuk penetapan variabel.
MYBASENAME=$(basename "$1")
hanya itu yang diperlukan. Anda harus membiasakan diri menggunakan $()
bukannya backticks karena $()
sarang lebih mudah (ini POSIX, btw., dan semua shell modern mendukungnya.)
PS:Anda sebaiknya mencoba untuk tidak tulis bash skrip. Coba tulis shell skrip. Perbedaannya adalah tidak adanya bashism, zshisms, dll. Sama seperti C, portabilitas adalah fitur skrip yang diinginkan, terutama jika dapat diperoleh dengan mudah. Skrip Anda tidak menggunakan bashisme apa pun, jadi saya akan menulis #!/bin/sh
alih-alih. Untuk pemetik nit:Ya, saya tahu, SunOS lama dan Solaris /bin/sh
tidak mengerti $()
tapi /usr/xpg4/bin/sh
adalah cangkang POSIX.