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 %~n1en 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