![bash では OK ですが、sh では OK ではありません - diff < (ls)](https://rvso.com/image/1606676/bash%20%E3%81%A7%E3%81%AF%20OK%20%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81sh%20%E3%81%A7%E3%81%AF%20OK%20%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%20-%20diff%20%3C%20(ls)%20.png)
GNU Bash では、diff <(df) <(ls)
が実行されています。
ではsh
、 は実行されていません。
も試しましたが[[diff </bin/df <bin/ls]]
、それでもエラーが発生します。
$ [[/usr/bin/diff < (/bin/ls) < (bin/df)]]
sh: 1: Syntax error: "(" unexpected
$ bash
に相当するものを誰か知っていますかsh
? 助言をいただければ本当に助かります。
答え1
置換に直接相当するものはありません<(…)
>(…)
。代わりに、名前付きパイプを手動で作成する必要があります。
mkfifo /tmp/lspipe
mkfifo /tmp/dfpipe
/bin/ls > /tmp/lspipe &
/bin/df > /tmp/dfpipe &
/usr/bin/diff /tmp/lspipe /tmp/dfpipe
rm /tmp/lspipe /tmp/dfpipe
(また、Bashでは、いいえ<
との間にスペースを入れます(…)
。
このコンテキストではは[[…]]
まったく意味をなしません。 はコマンドをグループ化するためのものではなく、条件式を記述するためのものです (コマンドをグループ化する( )
またはと混同しないでください)。 これは Bash 固有の機能でもありますが、正しく使用されている場所では または に{ }
置き換えることができます。[ … ]
expr