それがそうであることを意味するからです。
<(...)
in bash
はプロセス置換の構文です。の同じ演算子からコピーされksh
ます。
<
、(
、)
、|
、&
、;
特殊な字句であるbash
異なる組み合わせで特殊な演算子を形成するために使用されます。<
、<(
、<<
、<&
...それぞれが自分の役割を担っています。<
リダイレクト用です。<file
、< file
ファイルから入力をリダイレクトします。<'(file)'
と呼ばれるファイルから入力をリダイレクトします(file)
が<(file)
、リダイレクト演算子ではない別の演算子です。
< (file)
に<
続き(file)
ます。その意味で、でbash
、(file)
有効ではありません。(...)
次のようなコンテキストでは、単一のトークンとして有効になります。
(sub shell)
func () {
...
}
var=(foo bar)
しかしではない
sort < (cmd)
ではfish
、シェル、それは違います。コマンド置換(のと同等のためですで)。また、Bourneのようなシェルのような入力リダイレクト用です。fish
(...)
$(...)
bash
<
だからfish
:
sort <(echo file)
次と同じです:
sort < (echo file)
あれは:
sort < file
しかし、それはのbash
プロセス置換とはまったく異なるものです。
ではyash
、シェル、別のPOSIXシェルは、<(...)
のためではないプロセス置換が、ためにプロセスのリダイレクト
そこで、
sort <(ls -l)
略称:
sort 0<(ls -l)
はリダイレクト演算子です。以下とほぼ同等です。
ls -l | sort
にある間bash
、<(ls -l)
はパイプのパスに展開されるため、次のようになります。
ls -l | sort /dev/fd/0
ではzsh
、(...)
グロブ演算子として(およびに(*.txt|*.png)
展開される)グロブ修飾子として(たとえば、ディレクトリファイルに展開される)オーバーロードされます。txt
png
*(/)
ではzsh
では、:
sort < (ls -l)
これ(ls -l)
は、glob修飾子として扱われます。l
リンクの数に一致することであり、後の数字を期待修飾子グロブl
(のようにするとls -ld ./*(l2)
、2つのリンクを持つファイルを一覧表示します)ので、あなたが得る理由のzsh: number expected
誤差が。
sort < (w)
与えられたであろうzsh: no matches found: (w)
として代わりにエラーを(w)
書き込み可能です、空の名前を持つファイルが一致します。
sort < (w|cat)
w
および/またはcat
現在のディレクトリ内のファイルのコンテンツをソートしているでしょう...