Estoy tratando de corregir mi primer script bash, y en un momento se pasa un nombre de archivo al script como $1
. Necesito extraer el nombre del archivo sin la extensión.
Actualmente, supongo que todas las extensiones son tres letras, así que elimino los últimos 4 caracteres para obtener el nombre del archivo:
a="${1:0:-4}"
Pero necesito poder trabajar con extensiones que tengan más de tres caracteres, como %~n1
en Windows.
¿Hay alguna forma de extraer el nombre del archivo sin la extensión de los argumentos?
Respuestas:
La forma habitual de hacer esto en bash es usar la expansión de parámetros. (Consulte la página de manual de bash y busque "Expansión de parámetros").
El
%
indica que todo lo que coincida con el patrón siguiente (.*
) desde la derecha, utilizando la coincidencia más corta posible, se eliminará del parámetro$1
. En este caso, no necesita comillas dobles (") alrededor de la expresión.fuente
${1%.*}
volveremosSomething.eng
. Si desea quitar todo a la derecha de la primera,.
incluido.
, use${1%%.*}
, que volveráSomething
.Si conoce la extensión, puede usar basename
fuente
One-liner en Bash sin usar basename :
fuente