私のお勧めは、 を使用することbasename
です。
Ubuntu ではデフォルトで、視覚的に単純なコードであり、ほとんどのケースに対処します。
スペースとマルチドット/サブエクステンションを処理するサブケースを次に示します。
pathfile="../space fld/space -file.tar.gz"
echo ${pathfile//+(*\/|.*)}
通常は first から拡張子を取り除きますが、私たちのパス.
では失敗します..
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%.*}")'