Je recommande d'utiliser basename
.
Il est par défaut dans Ubuntu, le code est visuellement simple et traite la majorité des cas.
Voici quelques sous-cas pour traiter les espaces et les multi-points/sous-extensions :
pathfile="../space fld/space -file.tar.gz"
echo ${pathfile//+(*\/|.*)}
Il se débarrasse généralement de l'extension en premier .
mais nous échouons dans notre ..
chemin
echo **"$(basename "${pathfile%.*}")"**
space -file.tar # I believe we needed exatly that
Voici une note importante :
J'ai utilisé des guillemets doubles à l'intérieur de guillemets doubles pour gérer les espaces. Les guillemets simples ne passeront pas à cause de l'écriture du $. Bash est inhabituel et lit "second "premier" guillemet" en raison de l'expansion.
Cependant, vous devez toujours penser à .hidden_files
hidden="~/.bashrc"
echo "$(basename "${hidden%.*}")" # will produce "~" !!!
pas le résultat attendu. Pour que cela se produise, utilisez $HOME
ou /home/user_path/
parce qu'une fois encore, bash est "inhabituel" et ne développe pas "~" (recherchez bash BashPitfalls).
hidden2="$HOME/.bashrc" ; echo '$(basename "${pathfile%.*}")'