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

Fumbani Banda 2023年1月30日 2022年3月22日
  1. Bash でサブストリングパラメータ拡張を使用してファイルベース名を抽出する
  2. Bash で basename コマンドを使用してファイルベース名を抽出する
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
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub