web-dev-qa-db-ja.com

`[$ '\ r \ n']`はどういう意味ですか?

line=${line//[$'\r\n']}。しかし、[$'\r\n']意味ですか?

'\r\n'文字ですが、これはどのように行われますか?両方の文字のインスタンスのみを削除しますか、それとも1つの文字のみの一致も検出しますか?

この構文の使い方がわかりません。

できればマニュアルへのリンクをください。この質問に対する答えは見つかりません。

3
UnixUser

ザ・バッシュのマニュアル から:

$ {parameter/pattern/string}
patternは、ファイル名の展開と同じように展開されてパターンを生成します。 Parameterが展開され、その値に対するpatternの最長一致が文字列に置き換えられます。照合は、以下に説明する規則に従って実行されます( パターン照合 を参照)。 pattern/で始まる場合、patternの一致はすべてstring。 ...stringがnullの場合、patternの一致が削除され、/に続くパターンが省略される場合があります。

${line//[$'\r\n']}があります。

  • パラメータline
  • pattern/[$'\r\n']です(注:/で始まるため、パターンのすべての一致が置き換えられます)。
  • stringはnullであるため、patternの後の/は省略され、一致は削除されます。

パターンマッチング のルールに従う:

[…]
囲まれた文字のいずれかと一致します。

$'...' は、特定のエスケープシーケンス(ここでは、キャリッジリターンの場合は\r、ラインフィードの場合は\n)を解釈して、エスケープで表される実際の文字に置き換えるようにbashに指示しますシーケンス。

したがって、この置換は、キャリッジリターン(CR、\r)またはラインフィード(LF、\n)のすべてのインスタンスに一致し、それらを削除します。

5
muru