GNU/Linux >> Tutoriels Linux >  >> Linux

nom de base avec des espaces dans un script bash ?

Le problème est que $1 dans

MYBASENAME="`basename $1`" 

n'est pas cité. Utilisez ceci à la place :

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

Il vous manque une série de guillemets !

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

Cela résoudra votre problème.


Dans le cas où l'affectation est une substitution de commande unique, vous n'avez pas besoin de citer la substitution de commande. Le shell n'effectue pas de fractionnement de mots pour les affectations de variables.

MYBASENAME=$(basename "$1")

est tout ce qu'il faut. Vous devriez prendre l'habitude d'utiliser $() au lieu de backticks car $() s'emboîte plus facilement (c'est POSIX, d'ailleurs, et tous les shells modernes le supportent.)

PS :Vous devriez essayer de ne pas écrire bash scripts. Essayez d'écrire shell scripts. La différence étant l'absence de bashismes, zshismes, etc. Tout comme pour C, la portabilité est une caractéristique souhaitée des scripts, surtout si elle peut être atteinte facilement. Votre script n'utilise aucun bashisme, donc j'écrirais #!/bin/sh Au lieu. Pour les tatillons :oui, je sais, les anciens SunOS et Solaris /bin/sh ne comprends pas $() mais le /usr/xpg4/bin/sh est un shell POSIX.


Linux
  1. Quel interpréteur Shell exécute un script sans Shebang ?

  2. Problème dans le script avec des espaces dans le nom de fichier ?

  3. Passer un nom de fichier avec des espaces à un script shell ?

  4. Espaces pour les variables dans le script bash ?

  5. Appelez le script Python à partir de bash avec un argument

Automatisez le traitement des images avec ce script Bash

Comment écrire un script bash avec des exemples

35 exemples de scripts bash

Comment exécuter un script bash

Bash Beginner Series #10 :Automatisation avec Bash

Script bash pour la boucle expliqué avec des exemples