Resultado inesperado al usar argumentos de línea de comando para buscar un archivo con símbolo

Resultado inesperado al usar argumentos de línea de comando para buscar un archivo con símbolo

Estoy intentando escribir un script que acepte 2 argumentos de línea de comando, por ejemplo, uno con el nombre de un directorio y el otro con un símbolo (cualquier símbolo puede ser $,£,^,*, etc.). Luego debería verificar si el directorio tiene un nombre de archivo que tenga ese símbolo y si no agrega el símbolo al directorio.

Entonces, si buscara un directorio llamado testDircomo primer argumento y tuviera *como segundo argumento, buscaría archivos en ese directorio para ver si hay ese símbolo en un archivo y, si no lo hubiera, ahora se llamaría al directorio testDir*.

Aquí hay un fragmento de código que estoy intentando desarrollar.

a1=$1  
  symbol=$(ls $a1 | grep $2)

   if [ "$symbol" != "" ]
     then
     echo "file has Symbol"

   else
     echo "The symbol was added to directory"
     mv $a1 $1$2
    fi

Parecía funcionar bien con el @símbolo, así que creo que ha sido afectado por los caracteres especiales. ¿Hay alguna forma de intentar escapar de caracteres especiales pero también trabajar con caracteres no especiales?

Respuesta1

En primer lugar, esnunca es una buena ideapara analizar la salida lscuando se buscan nombres de archivos. Eso se romperá con cualquier carácter extraño, incluido un espacio simple. La mejor manera de evitarlo es utilizarglobo de conchao finden su lugar.

Su siguiente problema es que no está citando las variables, lo que significa que los caracteres especiales se expanden antes de mvejecutar el comando. Un ejemplo práctico de su script sería:

#!/usr/bin/env bash

if find "$1" -print0 | grep -z "$2" >/dev/null
then
    echo "file has Symbol" 
else
    echo  "The symbol was added to directory" 
    echo mv "$1" "$1$2" 
fi

ADVERTENCIA: No tengo idea de por qué querrías hacer eso. Sería. por ejemplo, intente mover un directorio a un subdirectorio propio y fallará. Sospecho que hay un problema XY aquí y le sugiero que edite su pregunta para explicar lo que realmente está tratando de hacer.

información relacionada