web-dev-qa-db-fra.com

Comment extraire le nom de fichier sans l'extension d'un chemin complet?

J'essaie de corriger mon premier script bash et, à un moment donné, un nom de fichier est transmis au script sous la forme $1. J'ai besoin d'extraire le nom du fichier sans l'extension.
Actuellement, je suppose que toutes les extensions ont trois lettres. Je supprime donc les 4 derniers caractères pour obtenir le nom du fichier:

a="${1:0:-4}"

Mais je dois être capable de travailler avec des extensions comportant plus de trois caractères, comme %~n1 dans Windows.
Existe-t-il un moyen d'extraire le nom du fichier sans l'extension à partir des arguments?

9
user304822

La manière habituelle de faire cela dans bash consiste à utiliser le développement de paramètres. (Consultez la page de manuel bash et recherchez "Extension des paramètres".)

a=${1%.*}

Le % indique que tout ce qui correspond au modèle suivant (.*) en partant de la 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.

21
garyjohn

Si vous connaissez l'extension, vous pouvez utiliser nom de base

$ basename /home/jsmith/base.wiki .wiki
base
10
Steven Penny