Linux シェルを使用する場合、ファイル名やディレクトリ名を処理する必要があることがよくあります。通常の操作は、パスからのファイル名の抽出、パスからのディレクトリ名の抽出、ファイルのサフィックス名の抽出などです。たとえば、パス /dir1/dir2/file.txt からファイル名 file.txt を抽出し、ディレクトリ /dir1/dir2 を抽出し、ファイルサフィックス txt を抽出します。
以下では、関連する操作を実行するためによく使用される 2 つの方法を紹介します。
1. ${}
1、${var##*/}を使用します
このコマンドの機能は、変数 var の左側とその左側の内容から最後の '/' 文字を削除し、返すことです。左からの値 最後の「/」の右側の内容(この文字を除く)。使用例と結果は次のとおりです。
実行結果からわかるように、このコマンドを使用すると、必要なファイル名 file.txt を抽出できます。
シェル プログラム ファイルで使用する場合、file=${var##*/}
2、${var##*.}
など、変数を使用して結果を保存し、それを使用できます。このコマンドの機能は、変数 var の左側の最後の '.' 文字とその左側の内容を削除し、最後の '.' の右側の内容 (この文字を除く) を左から返すことです。 。使用例と結果は次のとおりです。
実行結果からわかるように、このコマンドを使用すると、必要なファイルのサフィックスを抽出できます。
file.tar.gz など、ファイルに複数のサフィックスがある場合、コマンド ${var##*.} は最後のサフィックスのみを抽出できます。tar.gz を抽出したい場合はどうすればよいですか?次に、以下で説明する ${var#*.} コマンドを使用する必要があります。
3. ${var#*.}
このコマンドの機能は、変数 var の左側から最初の '.' 文字とその左側の内容を削除し、最初の '.' を返すことです。左」(この文字を除く)。使用例と結果は以下のとおりです。
実行結果から分かるように、このコマンドを使用するとファイルの複数の拡張子を抽出できます。
4. ${var%/*}
このコマンドの使用は、変数 var の右側から最初の '/' 文字とその右側の内容を削除し、最初の ' を返します。右側。/' の左側の内容 (この文字を除く)。使用例と結果は以下のとおりです:
実行結果からわかるように、このコマンドを使用すると、必要なファイルがあるディレクトリを抽出できます
5, ${var%%.*}
このコマンドの使用は、変数 var の右側の最後の '.' 文字とその右側の内容を削除し、最後の '.' の左側の内容 (この文字を除く) を返すことです。権利。使用例と結果は以下のとおりです:
対応するファイルに対応するファイル名と同じ名前(サフィックスなし)のディレクトリを作成する必要がある場合、このコマンドを使用して操作できます。たとえば、ファイルを解凍する状況は、file.zip を圧縮すると、file.zip と同じディレクトリに file という名前のディレクトリが作成されます。
6. ${} の概要
実際、${} は、変数やその他の操作の抽出と置換に特に使用されません。上記の 5 つの例では、「/」または「.」でなければなりません。つまり、上記の使用方法は特殊な使用例に過ぎません。
上記のコマンドを見ると、理解して覚えるのが非常に難しいかもしれません。実際、これらはすべて規則的なものです。
#: 左から最初のものを示します
%: 右から最初のものを示します
##: 左から最後のものを示します
%%: 右から最初のものを示します最後のやつ
つまり、# は常に左から数えることを意味し、% は常に右から数えることを意味します。
*: # と ## の場合は、指定した文字(例では「/」と「.」)の左側にあり、指定した文字とその文字を削除することを意味します。 %% の場合は、指定した文字 (例では「/」と「.」) の右側にあり、指定した文字とその右側の内容が同じであることを示します。削除されました。ここでの「*」の位置は交換できません。つまり、* 記号を # または ## の右側に配置することはできず、その逆も同様です。
例: ${var%%x*} は、右から最後の文字 x を検索し、文字 x とその右側の文字を削除することを意味します。
これを見ると、このコマンドが実際には非常に多用途であることがわかります。上記は、ポインター ファイル名とディレクトリ名の命名プロパティを抽出するいくつかの特殊なケースにすぎません。
2.basename と dirname
${} は、ファイル名とディレクトリ名を抽出するために特別に設計されたコマンドではないため、basename と dirname コマンドはこの目的のために特別に用意されています。
1.basename
このコマンドの機能は、パスからファイル名を抽出することです。使用方法は、basename NAME [SUFFIX] です。
1) パスからファイル名 (サフィックス付き) を抽出します。例は次のとおりです。
2) 上記のコマンドの使用法からわかるように、サフィックス (SUFFIX) はオプションです。したがって、サフィックスのないファイル名ファイルのみを抽出したい場合は、変数の後にサフィックス名を追加することもできます。例は次のとおりです。
2, dirname
このコマンドの機能は次のとおりです。パスからファイル名を抽出する ディレクトリ名を抽出する 使用方法は以下の通りです:
このようにして、file.txtファイルが存在するディレクトリが抽出されます。
注: このコマンドは、通常のファイルが配置されているディレクトリを抽出するだけでなく、次のように、ディレクトリが配置されているディレクトリなど、任意のファイルが配置されているディレクトリを抽出することもできます。ディレクトリ dir1 ディレクトリ dir2 の場所以上がこの記事の全内容です。皆様の学習に役立つことを願っています。
ファイル名とディレクトリ名を抽出するいくつかの方法に関する Linux シェルの概要については、PHP 中国語 Web サイトの関連記事に注目してください。