Estoy tratando de escribir una secuencia de comandos que toma el nombre básico de un argumento, luego verifica si hay una extensión en ese argumento. Si hay, imprime la extensión.Sintaxis del bash de Bash
Aquí está mi código:
file=basename $1
ext=${file%*}
echo ${file#"$stub"}
echo $basename $1
estoy haciendo eco de la final de $ nombre base de $ 1 a comprobar lo que la salida del nombre base es.
Algunas pruebas revelan:
testfile.sh one.two
./testfile: line 2: one.two: command not found
one.two
testfile.sh ../tester
./testfile: line 2: ../tester: No such file or directory
../tester
Así que ni nombre base $ $ 1 están trabajando. Sé que es un error de sintaxis, así que, ¿podría alguien explicar lo que estoy haciendo mal?
EDIT:
he resuelto mi problema ahora con:
file=$(basename "$1")
stub=${file%.*}
echo ${file#"$stub"}
que reduce mi argumento a un nombre base, gracias a todos.
La sintaxis correcta es file = $ (basename $ 1). Te recomendaría usar file = $ {1 ## * /}, que eliminará cada secuencia '* /'. En realidad, es mucho más rápido que el comando basename, especialmente al procesar archivos en un bucle. –