シェルスクリプトを見ていると、次のようなものが見つかりました
${var#*.}
$var が 111.txt の場合
echo ${var#*.}
txt が返されます。これは良いことです。理由を知りたいです。ありがとうございます
シェルスクリプトを見ていると、次のようなものが見つかりました
${var#*.}
$var が 111.txt の場合
echo ${var#*.}
txt が返されます。これは良いことです。理由を知りたいです。ありがとうございます
${var#pattern}
変数の値のパターン (先頭から始まり、最短) を見つけて削除し、残りを返します。
したがって、パターンは「. が続くもの」を意味し、「txt」が残ります。
ちなみに、${var##pattern}
は最長一致パターンを削除します
、var=111.111.txt
その後
${var#\*.}
戻り111.txt
${var##\*.}
ます 戻りますtxt
bash
マニュアルページから:
${parameter#word}
一致するプレフィックス パターンを削除します。
単語は、パス名の展開と同様にパターンを生成するために展開されます。パターンが parameter の値の先頭と一致する場合、展開の結果は、一致する最も短いパターンが削除された parameter の展開された値になります。
その理由は、文字列の一部をパターンで操作する機能は、高価なフォークやパイプを使用せずに済むため、非常に便利だからです。
${#parameter}
文字列の長さ。パラメータの値の文字数が代入されます。パラメータが「*」または「@」の場合、展開の結果は指定されていません。パラメータが設定されておらず、set -u が有効な場合、展開は失敗します。
次の 4 種類のパラメーター展開は、部分文字列処理を提供します。いずれの場合も、パターンの評価には、正規表現表記法ではなく、パターン マッチング表記法 (パターン マッチング表記法を参照) を使用する必要があります。パラメータが「#」、「*」、または「@」の場合、展開の結果は指定されていません。パラメータが設定されておらず、set -u が有効な場合、展開は失敗します。完全なパラメーター展開文字列を二重引用符で囲んでも、次の 4 種類のパターン文字が引用されることはありませんが、中括弧内の文字を引用すると、この効果が生じます。各品種において、単語を省略した場合は、空のパターンを使用するものとします。
${parameter%[word]}
最小サフィックス パターンを削除します。単語を展開してパターンを生成する必要があります。パラメーター展開は、パターンに一致するサフィックスの最小部分が削除されたパラメーターになります。存在する場合、単語は引用符で囲まれていない「%」で始まってはなりません。
${parameter%%[word]}
最大サフィックス パターンを削除します。単語を展開してパターンを生成する必要があります。パラメーター展開は、パターンに一致するサフィックスの最大部分が削除されたパラメーターになります。
${parameter#[word]}
最小プレフィックス パターンを削除します。単語を展開してパターンを生成する必要があります。パラメータ展開はパラメータになり、パターンに一致するプレフィックスの最小部分が削除されます。存在する場合、単語は引用符で囲まれていない「#」で始まってはなりません。
${parameter##[word]}
最大プレフィックス パターンを削除します。単語を展開してパターンを生成する必要があります。パラメータ展開はパラメータになり、パターンに一致するプレフィックスの最大部分が削除されます。