J'essaye de redresser mon premier script bash, et à un moment donné un nom de fichier est passé au script comme $1
. J'ai besoin d'extraire le nom du fichier sans l'extension.
Actuellement, je suppose que toutes les extensions sont de trois lettres, donc je supprime les 4 derniers caractères pour obtenir le nom du fichier:
a="${1:0:-4}"
Mais je dois pouvoir travailler avec des extensions qui ont plus de trois caractères, comme %~n1
dans Windows.
Existe-t-il un moyen d'extraire le nom du fichier sans l'extension des arguments?
Réponses:
La façon habituelle de le faire dans bash est d'utiliser l'expansion des paramètres. (Consultez la page de manuel bash et recherchez «Expansion des paramètres».)
Le
%
indique que tout ce qui correspond au modèle suivant (.*
) de droite, en utilisant la correspondance la plus courte possible, doit être supprimé du paramètre$1
. Dans ce cas, vous n'avez pas besoin de guillemets (") autour de l'expression.la source
${1%.*}
reviendraSomething.eng
. Si vous souhaitez supprimer tout à droite du premier,.
y compris le.
, utilisez${1%%.*}
, qui reviendraSomething
.Si vous connaissez l'extension, vous pouvez utiliser le nom de base
la source
One-liner dans Bash sans utiliser de nom de base :
la source