「title」という変数に名前が格納された「Hello World:The Simplest Program」というファイルがあるとします。
グローバルパターンマッチングにマッチさせたいのですが、コロンを削除します。つまり、「Hello World Simplest Program」とマッチしたいのです。
これを使ってこれを行うことができることがわかりました。
${/:/|${title}|}
動作しますが、理由を理解していません。
「|」は OR であることがわかっているので、「${/:/}」、「${${title}}」、または「${}」と一致するように見えますが、どちらも削除にはないようです。コロン。
だから私の質問は、上記のグローバルパターン一致式がタイトルからコロンをどのように/なぜ削除するのですか?
編集:私が使用しているシェルはSteam ROM Managerであることに言及したいと思います。私が間違っているようです。 glob 式ではなく (デフォルトの正規表現構文の代わりに) glob 構文をオプションで使用する Steam ROM パーサー関数変数です. Steeldiverとilkkachuに感謝!
答え1
あなたの質問の表現は次のとおりです。グローバル表現、これは明らかにSteam ROMパーサー関数変数それオプションでパターンマッチングシーケンスとしてデフォルトの正規表現構文の代わりにglob構文を使用します。
表現は次の形式です。
${/pattern/|input|}
pattern
変数拡張と同じです。この場合、三項条件として理解する必要があります。:
input
${title}
|
|on match|no match(optional)
soはin${/:/|${title}|}
の一致を一致させ、何もないものに置き換えることを意味します。:
${title}
シェルグローブや正規表現の構文では特別ではないので、:
これを設定したのか他のものに設定したのかは実際には重要ではありません。Parser Type
glob
答え2
Bashであなたが持っていると仮定しtitle="Hello World: The easiest program"
、使用する場合パラメータ拡張このように:
echo ${title/:/}
それは印刷される
Hello World The easiest program
${title/:/}
「パラメータのタイトルを取得しますが、最初は「:」があり、子は「」にあります(つまり、何もありません)。」と言います。
以下のように extra/ を使用すると、${title//:/}
すべての項目が置き換えられます。
title="Hello World: The easiest:::::: program"
echo ${title//:/}
Hello World The easiest program
明らかな選択肢があります:
title="Hello World: The easiest:::::: program"
echo ${title//:/*}
Hello World* The easiest****** program