ベア<は何をしますか?


10

bash あなたがのようなコマンドを実行しても文句を言わないようです

$ < some-file-that-exists

何も起こらないようです。

あなたも使うことができます

$ <<<"any string"

そしてプロセスの代替さえ。

それで、これは正確に何をするのか、そしてなぜそれが許可されるのですか?それは何かに役立ちますか?


ところで、素晴らしいZSHの場合、 "<foobar"は "less foobar"と同じです。シェルへのリダイレクトfoobarです。これはかなり直感的な行動だと思います。引数が指定されていないため<、ベアはエラー(zsh: parse error near `\n')を返します。
数学

@mathでも同様のエラーが発生しますがbash、これは興味深いものlessです。
爆発の丸薬

回答:


20

<リダイレクト指示の前または後に発生する可能性があるコマンドのリダイレクトを設定します。すなわち

$ < file wc

同様に動作します

$ wc < file

ただし、コマンドを指定しない場合、bashはリダイレクトを設定し、他には何もしません。入力リダイレクトの場合、ファイルが存在し、読み取り可能である場合、これは何も表示されないことになります。ファイルが存在しないか読み込めない場合、bashはエラーを通知します。出力リダイレクトの場合、出力ファイルが存在しない場合は作成されます。>が使用されている場合、既存の出力ファイルは切り捨てられます。>>が使用されている場合、切り捨ては行われません。


言い換えれば、それらは存在し、作成する簡潔なものです
ラチェットフリーク

@Kyle Jones最後の文の2つの演算子が一致していないと思います。
jamesbtate

@Puddingfoxありがとう。わかりやすくするために、最後に追加の文章を編集しました。
カイルジョーンズ

< file wc対を使用する理由はありますwc < fileか?
爆発の丸薬

1
@tanduインタラクティブなシェルを使用するときに便利です。リダイレクトを使用するコマンドがあり、最後の引数を変えてそれを繰り返したいとします。リダイレクトが行の先頭にある場合、control-Pを入力して最後の引数を編集するのは簡単です。最後の引数のように、「<foo> bar 2>&1」言語をスキップする必要はありません。それを超えて、私はそれを使用することはできませんでした。
カイルジョーンズ

5

<デフォルトでstdinまたはファイルから読み取ります。あなたが読んだ後で何もしなかったので、あなたの式は入力に対して何もしません。

最後に<some-file-that-exists> outputfileを実行すると、最初のファイルの内容を読み取って2番目のファイルに書き込んだことがわかります。

<<<はここではdoc形式なので、ファイルではなく文字列から読み取ります。cat <<< "any string"を使用して、読んだ内容を確認します。


2
今後の参考のために、コメントを追加するのではなく、回答を編集して詳細を追加してください
Nate Koppenhaver

2
「最後に<some-file-that-exists> outputfileを実行すると、最初のファイルの内容を読み取って2番目のファイルに書き込んだことがわかります。」これは間違っています; コマンドがない場合、出力ファイルはゼロバイトに切り捨てられます。
カイルジョーンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.