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?
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.
Si vous connaissez l'extension, vous pouvez utiliser nom de base
$ basename /home/jsmith/base.wiki .wiki
base