Ответ 1
Да, diff <(echo "$foo") <(echo "$bar")
отлично.
В поисках bash manpage для символов <(
вы можете обнаружить, что это называется "подстановка процесса".
Вам не нужно беспокоиться об эффективности создания временного файла, потому что временный файл - это всего лишь канал, а не файл на диске. Попробуйте следующее:
$ echo <(echo foo)
/dev/fd/63
Это показывает, что временный файл на самом деле является только "файловым дескриптором 63". Хотя он отображается в виртуальной файловой системе /dev
, диск никогда не трогается.
Актуальная проблема с эффективностью, о которой вам может понадобиться беспокоиться, - "часть процесса" замещения процесса ". Bash открывает еще один процесс для выполнения echo foo
. На некоторых платформах, таких как Cygwin, это может быть очень медленным, если выполнять часто. Однако на большинстве современных платформ fork
ing довольно быстро. Я просто попытался сделать 1000 подстановок процесса сразу, запустив script:
echo <(echo foo) <(echo foo) ... 997 repetitions ... <(echo foo)
Это потребовало 0.225s на моем старшем ноутбуке Mac и 2,3 секунды на виртуальной машине Ubuntu, работающей на том же ноутбуке. Разделение на 1000 вызовов, это показывает, что замещения процесса занимают менее 3 миллисекунд, что полностью затмевает время выполнения diff
и, вероятно, не о чем вам нужно беспокоиться!