J'essaie de définir une variable dans un script sh sur les 3 derniers caractères du nom de base d'un fichier (par nom de base, je veux dire sans le chemin et sans le suffixe). J'ai réussi à le faire mais, par pure curiosité, je me demande s'il y a une commande unique plus courte que je peux utiliser. À l'origine, j'avais un monoplace avec awk, mais c'était plutôt long. Actuellement, j'ai ce script à deux lignes (en supposant qu'un nom de fichier complet se trouve $1):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Ainsi, par exemple, "/path/to/somefile.txt" se termine par "ile" dans $lastpart.
Puis-je en quelque sorte combiner basenameet le bit pour supprimer le suffixe en une seule commande, et existe-t-il un moyen de l'envoyer à tail(ou autre chose que je peux utiliser) sans utiliser de canal? Le suffixe est inconnu, je ne peux donc pas le baser en tant que paramètre sur basename.
L'objectif principal n'est pas vraiment d'être aussi court que possible, mais d'être aussi lisible d'un coup d'œil que possible. Le contexte réel de tout cela est cette question sur Superuser , où j'essaie de trouver une réponse assez simple.
twofonctionnerait; l'extension sur ce serait .threeje suppose.
                
file.one.two.three? Souhaitez-vousileoutwo?