1. ホーム
  2. linux

[解決済み】bashでパスと拡張子なしでファイルのベースネームを抽出する【重複あり

2022-04-18 07:40:10

質問

このようなファイル名があると

/the/path/foo.txt
bar.txt

得たい。

foo
bar

なぜうまくいかないのか?

#!/bin/bash

fullfile=$1
fname=$(basename $fullfile)
fbname=${fname%.*}
echo $fbname

正しい方法とは?

どのように解決するのですか?

を呼び出す必要はありません。 basename コマンドを使用します。その代わりに、次のようなコマンドを使うことができます。

$ s=/the/path/foo.txt
$ echo "${s##*/}"
foo.txt
$ s=${s##*/}
$ echo "${s%.txt}"
foo
$ echo "${s%.*}"
foo

なお、この解決策は最近のすべての( 2004年以降 ) ポシックス 準拠のシェル、(例えば bash , dash , ksh など)。

出典 シェルコマンド言語 2.6.2 パラメータの展開

bashの文字列操作の詳細。 http://tldp.org/LDP/LG/issue18/bash.html