GNU/Linux >> Belajar Linux >  >> Linux

nama dasar dengan spasi dalam skrip bash?

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.


Linux
  1. Spasi Untuk Variabel Dalam Skrip Bash?

  2. Mengapa Saya Tidak Dapat Keluar dari Spasi Pada Skrip Bash??

  3. Ganti spasi dengan garis bawah melalui BASH

  1. Penerjemah Shell mana yang Menjalankan Skrip Tanpa Shebang?

  2. Izin ditolak dengan bash.sh untuk menjalankan cron

  3. Menambahkan ke $PYTHONPATH dengan skrip bash

  1. Skrip Bash Dengan `set -e` Tidak Berhenti Pada Perintah `… &&...`?

  2. Masalah Dalam Skrip Dengan Spasi Di Nama File?

  3. Melewati Nama File Dengan Spasi Ke Skrip Shell?