GNU/Linux >> Tutoriales Linux >  >> Linux

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

Esta pregunta ya tiene respuestas aquí :¿Por qué mi script de shell se ahoga con espacios en blanco u otros caracteres especiales?

(6 respuestas)
Cerrado hace 6 años.

Estoy tratando de escapar del carácter de espacio para una ruta en Bash, pero ni el uso de una barra invertida ni las comillas funcionan.

Guión .sh:

ROOT="/home/hogar/Documents/files/"
FILE=${ROOT}"bdd.encrypted"
DESTINATION="/home/hogar/Ubuntu\ One/folder"

mv ${FILE} ${DESTINATION}

Después de ejecutar el script (./file ) este es el resultado:

mv: target 'One/folder' is not a directory

¿Por qué mv comando dividir la cadena, y ¿cómo evito que esto suceda?

Respuesta aceptada:

Estás expandiendo la variable DESTINO, si hiciste echo esto es lo que obtendrías:

echo ${DESTINATION}
/home/hogar/Ubuntu\ One/folder

Pero mv no entiende esto:

mv ${FILE} ${DESTINATION}                                                
mv: cannot move '/home/hogar/Documents/files/bdd.encrypted' to '/home/hogar/Ubuntu\\ One/folder': No such file or directory

(por alguna razón, mi mv es más detallado)

Para evitar esto, debe usar comillas en su lugar:

mv "${FILE}" "${DESTINATION}"

Si no necesita expansión (ya que ya se está expandiendo antes), simplemente use "$..." debería ser suficiente:

mv "$FILE" "$DESTINATION"

Linux
  1. ¿Se puede conectar un script Bash a un archivo?

  2. Bash Script para completar una plantilla?

  3. No puedo entender este guión. golpe?

  4. Cómo reemplazar espacios en nombres de archivos usando un script bash

  5. nombre base con espacios en un script bash?

35 ejemplos de secuencias de comandos Bash

Cómo ejecutar un script Bash

¿Por qué Bash no almacena comandos que comienzan con espacios?

¿Espacios para variables en Bash Script?

¿Por qué no puedo obtener la salida de Pgrep directamente a la variable en Bash Script?

Ejecute el comando bash en la canalización de jenkins