私の推奨はを使用することbasename
です。
Ubuntuではデフォルトで視覚的に単純なコードであり、ほとんどの場合に対応します。
スペースとマルチドット/サブ拡張を処理するためのサブケースをいくつか示します。
pathfile="../space fld/space -file.tar.gz"
echo ${pathfile//+(*\/|.*)}
通常、最初から拡張子を取り除き.
ますが、..
パスに失敗します
echo **"$(basename "${pathfile%.*}")"**
space -file.tar # I believe we needed exatly that
ここに重要な注意があります:
スペースを処理するために、二重引用符内で二重引用符を使用しました。$にテキストを送信するため、単一引用符は渡されません。Bashは珍しく、拡張のために「2番目の「最初の」引用符」と読みます。
しかし、あなたはまだ考える必要があります .hidden_files
hidden="~/.bashrc"
echo "$(basename "${hidden%.*}")" # will produce "~" !!!
予想される「」の結果ではありません。それを実現するには、$HOME
または/home/user_path/
bashが「異常」であり、「〜」を展開しないため(bash BashPitfallsを検索)
hidden2="$HOME/.bashrc" ; echo '$(basename "${pathfile%.*}")'
basename $filename .exe
同じことをします。これは、削除する拡張機能を常に知っていることを前提としています。