Bash でファイルベース名を抽出する

このチュートリアルでは、サブストリングパラメータ展開と basename
コマンドを使用してファイルベース名を抽出するさまざまな方法を示します。
Bash でサブストリングパラメータ拡張を使用してファイルベース名を抽出する
Bash のパラメーターは、値を格納する要素です。拡張は、パラメータ参照をその値に置き換えています。
Bash でパラメーターを展開するには、パラメーター名の前に $
文字を付けます。パラメータの名前を中括弧で囲むことはオプションです。
パラメータ拡張の 2つの表記法を以下に示します。
$parameter
${parameter}
パラメータ展開の中括弧内に、いくつかの演算子を引数と一緒に追加できます。演算子は、パラメーター名の後、閉じ中括弧の前に配置されます。
これらの演算子は、条件付き、部分文字列、サブセット、プレフィックスリスト、要素のカウント、および大文字小文字の変更の拡張に使用できます。これらの演算子は、パラメーターの値を変更せずにパラメーターを変更するだけです。
以下のスクリプトは、サブストリングパラメーター展開を使用して、ストリングパターンマッチングによってサブストリングを抽出します。使用される構文は ${parameter##pattern}
です。
##
は、パターンが文字列の左側から一致する必要があることを指定し、*/
はこの場合のパターンです。${path##*/}
は path
変数の最後の/
と一致し、この場合は残りのサブストリング file1.txt
を返します。
path=/home/delftstack/test/file1.txt
echo "${path##*/}"
スクリプトを実行すると、ファイルの名前が標準出力に出力されます。
file1.txt
Bash で basename
コマンドを使用してファイルベース名を抽出する
basename
は、引数としてファイルパスを指定された最後の要素を返す Linux のコマンドです。以下のスクリプトでは、basename
コマンドに、引数としてファイルパスを持つ path
変数が指定されています。スクリプトは、コマンド置換を使用して basename
コマンドを実行します。
コマンド置換は、Linux コマンドを実行し、コマンドの出力を変数に格納できるようにする Bash 機能です。この機能を使用してコマンドが実行されると、コマンドの標準出力がコマンドに置き換わり、末尾の改行が削除されます。
basename
コマンドの出力は、コマンド自体を置き換え、fname
変数に割り当てられます。printf
コマンドは、fname
変数の内容を標準出力に表示するために使用されます。
path=/home/delftstack/test/file1.txt
fname=$(basename "$path")
printf $fname
printf "\n"
スクリプトを実行すると、次の出力が表示されます。
file1.txt