これはbash組み込みに関するものですecho
。 Bashのドキュメントによると、この-e
オプションはバックスラッシュエスケープを解釈できます。
実行すると、 echo "Total Amount \$500"
予想される出力が表示されます Total Amount $500
。ここでは、そのオプションを使用せずにバックスラッシュを使用して "$"文字をエスケープできます -e
。ただし、新しい行またはタブをエスケープするには、コマンドに次のオプションが必要です -e
。echo
echo -e "Total Amount: \n \$500"
答え1
bashのマニュアルでは、echo
スイッチで使用する方法について次のように説明します-e
。
-eオプションが指定されたら、次のバックスラッシュエスケープ文字を解釈できます。
」を指定します。次のような「バックスラッシュエスケープ文字」と入力してリストします。
\a
alert (bell)
\b
backspace
\c
suppress further output
\e
\E
escape
\f
form feed
\n
new line
\r
carriage return
\t
horizontal tab
\v
vertical tab
\\
backslash
\0nnn
the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH
the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
実際には()より()に近いので、混乱する可能性がありますescape sequence
。escape character
escape character
\
エスケープシーケンス
エスケープシーケンスは、文字または文字列リテラル内で使用されている場合はそれ自体では表現されませんが、直接表現するのが難しいまたは不可能な他の文字または文字シーケンスに変換される文字シーケンスです。
エスケープ文字
コンピューティングおよび通信では、エスケープ文字は、一連の文字から後続の文字の代替解釈を呼び出す文字です。エスケープ文字はメタ文字の特殊なケースです。一般的に言えば、エスケープ文字かどうかは状況によって決まります。
この-e
オプションはエスケープ文字とはほとんど関係ありませんが、上記の文字と組み合わせて使用すると、sequences
特別な意味を持つと解釈できます。
答え2
文字列変換には2つのステップがあります。
- まず、bashはコマンドラインを解析し、2つの引数を使用してコマンドを
echo -e "Total Amount: \n \$500"
呼び出す必要があると判断します。echo
最初のパラメータはです-e
。 2番目のパラメータは、二重引用符で囲まれたリテラルを拡張した結果です"Total Amount: \n \$500"
。二重引用符で囲まれた文字列の規則を考えると、はで保持されるため、\$
コマンド$
に\n
渡さ\n
れるecho
2番目の引数はですTotal Amount: \n $500
。 - モードでは、echoコマンドは
-e
バックスラッシュで始まるいくつかのシーケンスを改行文字などの単一文字に置き換えます\n
。
「エスケープ」とは、あなたの質問で2つの異なる意味を意味します。最初のステップでは、\$
「エスケープ」のバックスラッシュは、文字が特別な処理をエスケープしてそのまま残ることを$
意味します。$
2 番目のステップでは、バックスラッシュは\n
通常の処理を「エスケープ」し、いくつかの特別な処理を適用してn
改行文字を生成します。
1バックスラッシュの後に続く文字は"$\`
2番目の文字になります。バックスラッシュの後に続く他のすべての文字は保持されます。
²バックスラッシュの後に数字が続くのは制御文字になります。バックスラッシュの後にその1つが続く文字は、xuU
16進数と同じ効果を持ちます。その後に他の文字が来ると、2番目の文字になります。