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

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

私はこの表現をたくさん使っていますline=${line//[$'\r\n']}。しかし、これは何を[$'\r\n']意味しますか?

文字を削除できることはわかっていますが、'\r\n'どうすればよいですか? 2文字のインスタンスのみを削除しますか、それとも1文字の一致も検索しますか?

この構文の使い方を理解できません。

可能であればマニュアルリンクお願いします。この質問に対する答えが見つかりません。

答え1

このコマンドは、変数からすべてのキャリッジリターンと改行バイトを削除しますline

${line//XYZ}これはパラメータ拡張のためのBash(およびzshとksh)拡張です。みんなパターンは何でもXYZ一致します$line

このパターンには[$'\r\n']2つのコンポーネントがあります。[...]マッチどの内部文字$'\r\n'はいANSI-Cの引用(他の拡張子)、キャリッジリターン(\r)、および改行(\n)バイトに拡張されます。これにはキャリッジリターンと改行文字が[$'\r\n']含まれているため、[...]両方とも一致します。

これ完全なマニュアルシェルコマンド、演算子、括弧などがすべてここにあります。、POSIX/SUS/IEEE 1003.1 仕様の一部です。これ吹く参考マニュアルはこちら

答え2

~からバッシュマニュアル:

${範囲/模様/ひも}
これ模様ファイル名拡張と同様に、パターンを生成するために拡張されます。範囲拡張され、最も長い一致模様 その値は文字列に置き換えられます。コンテストは次の規則に従って行われます(参照:パターンマッチング)。もし 模様、で始まる/すべての一致模様に置き換えられますひも。 ...もしひも空、一致模様これは削除され、/次のパターンは省略できます。

あなたは${line//[$'\r\n']}以下を持っています:

  • これ範囲はいline
  • これ模様は次のとおりです/[$'\r\n'](注:で始まる/ので、パターン内のすべての項目が置き換えられます)。
  • これひも空なので、/その後模様省略され、一致が削除されます。

次の規則に従ってくださいパターンマッチング:

[…]
含まれているすべての文字と一致します。

$'...'\rbashに特定のエスケープシーケンス(ここではキャリッジリターンと改行)を解釈\nし、それをエスケープシーケンスが表す実際の文字に置き換えるように指示します。

したがって、この交換はキャリッジリターン(CR、\r)または改行(LF、\n)のすべてのインスタンスを一致させて削除します。

答え3

$意味:ビューモードの行末パターンは '\ r \ n'です。意味: \r(キャリッジリターン文字) \n(改行文字)

角かっこ[]は、検索対象を別々の行に囲むために使用されます。

関連情報