GNU/Linux >> Tutoriales Linux >  >> Linux

nombre base con espacios en un script bash?

El problema es que $1 en

MYBASENAME="`basename $1`" 

no se cita. Use esto en su lugar:

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

¡Te falta un conjunto de comillas!

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

Eso solucionará tu problema.


En el caso de que la asignación sea una sustitución de un solo comando, no necesita citar la sustitución del comando. El shell no realiza división de palabras para asignaciones de variables.

MYBASENAME=$(basename "$1")

es todo lo que se necesita. Deberías acostumbrarte a usar $() en lugar de acentos graves porque $() se anida más fácilmente (es POSIX, por cierto, y todos los shells modernos lo admiten).

PD:Deberías intentar no escribe bash guiones. Intenta escribir shell guiones. La diferencia es la ausencia de bashisms, zshisms, etc. Al igual que para C, la portabilidad es una característica deseada de los scripts, especialmente si se puede lograr fácilmente. Su secuencia de comandos no usa ningún bashism, así que escribiría #!/bin/sh en cambio. Para los quisquillosos:sí, lo sé, SunOS y Solaris antiguos /bin/sh no entiendo $() pero el /usr/xpg4/bin/sh es un shell POSIX.


Linux
  1. ¿Problemas en el script con espacios en el nombre de archivo?

  2. ¿Pasar el nombre de archivo con espacios a un script de Shell?

  3. ¿Espacios para variables en Bash Script?

  4. ¿El comando Rm en Bash Script no funciona con variables?

  5. ¿Por qué no puedo escapar de los espacios en un script Bash?

Automatice el procesamiento de imágenes con este script Bash

Cómo escribir un script Bash con ejemplos

35 ejemplos de secuencias de comandos Bash

Cómo ejecutar un script Bash

Bash Beginner Series #10:Automatización con Bash

Bash Script for Loop explicado con ejemplos