GNU/Linux >> Linux Esercitazione >  >> Linux

basename con spazi in uno script bash?

Il problema è che $1 dentro

MYBASENAME="`basename $1`" 

non è citato. Usa invece questo:

MYBASENAME="$(basename "$1")"

Ti manca una serie di virgolette!

MYBASENAME="`basename \"$1\"`"

Questo risolverà il tuo problema.


Nel caso in cui l'assegnazione sia una singola sostituzione di comando non è necessario citare la sostituzione di comando. La shell non esegue la suddivisione delle parole per le assegnazioni di variabili.

MYBASENAME=$(basename "$1")

è tutto ciò che serve. Dovresti prendere l'abitudine di usare $() invece di apici inversi perché $() nidifica più facilmente (è POSIX, btw., e tutte le shell moderne lo supportano.)

PS:dovresti provare a non scrivi bash script. Prova a scrivere shell script. La differenza è l'assenza di bashisms, zshisms, ecc. Proprio come per C, la portabilità è una caratteristica desiderata degli script, specialmente se può essere raggiunta facilmente. Il tuo script non usa alcun bashismo, quindi scriverei #!/bin/sh invece. Per i pignoli:Sì, lo so, vecchio SunOS e Solaris /bin/sh non capisco $() ma il /usr/xpg4/bin/sh è una shell POSIX.


Linux
  1. Lo script Bash con `set -e` non si ferma al comando `… &&…`?

  2. Passare il nome del file con spazi a uno script di shell?

  3. Spazi per le variabili nello script Bash?

  4. Il comando Rm nello script Bash non funziona con la variabile?

  5. Sostituisci gli spazi con caratteri di sottolineatura tramite BASH

Automatizza l'elaborazione delle immagini con questo script Bash

Come scrivere uno script Bash con esempi

35 Esempi di script Bash

Come eseguire uno script Bash

Bash Beginner Series #10:Automazione con Bash

Script Bash per Loop spiegato con esempi