コマンドライン:<<ではなく<<<


63

コマンドmd5sum <<< 'ddd' (出力:)がd6d88f2e50080b9602da53dac1102762 -正しいのに、なぜ正しくmd5sum << 'ddd'ないのですか?

どういう<<<意味ですか?

回答:


45

<<<開始「ここに文字列」:文字列が展開され、プログラムの標準入力に供給されます。(あなたの場合、拡張はあまり起こりません。)これは次と同等です:

echo ddd | md5sum

一方、<<hereドキュメントを開始します。マーカーdddを含む次の行までのすべてが、プログラムの入力を構成します。(データに表示されそうにないマーカーを使用する必要があります。)上記と同じ効果を得るには、次のようにします。

md5sum <<END
ddd
END

との間に1つの違いが<<ENDあり<<'END'ます:引用符なしでは、ヒアドキュメント内の変数、エスケープシーケンスなどは通常どおりに展開されます。


3
それは同等ではありませんどこを除いてということであるrc<<<(のような<<)ので、コマンドで使用することができ、一時ファイルを使用してlseek自分のSTDIN。
ステファンシャゼル

32

<<<here文字列を導入します。その後の文字列<<<は、コマンドへの入力として渡されます。これは、rcUnixへのByron Rakitzisの(Plan 9シェル)の移植に由来し、zsh、ksh93、およびbashにも存在します。

<<ヒアドキュメントを導入します。シェルスクリプトの後続の行はコマンドへの入力として渡され、その後の文字列<<はターミネータです。ここでのドキュメントは、すべてのBourneスタイルのシェル(Bourne、POSIX、ash、bash、ksh、zshなど)、Cスタイルのシェル(csh、tcsh)、およびPlan 9シェル(rc、es)で機能します。


3
いいえ、拡張機能で<<<はありません。kshパスはrc-> zsh-> ksh93->ですbashkshリリースノートは一度機能を借用したことを認めていますzsh)。<<またで働くrcスタイルシェル
ステファン・Chazelas

との間に違いがrcありzsh <<<ますが、rc「s」には末尾の改行文字が含まれておらず、一時ファイルを使用していません(少なくともLinuxへのポートではパイプと追加プロセスを使用します)。
ステファンシャゼル

より正確に言うと、Plan9にあるようには見えないため<<<、Unixのポートから来ているrcように見えrcます。
ステファンシャゼル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.