GNU coreutils руководство дает некоторые примеры приложений, такие как сворачивание нескольких новых строк в одну (tr -s '\n'
) или помещение каждого слова на его собственной строке при удалении пунктуации одновременно (tr -cs '[:alnum:]' '[\n*]'
).
Похож это вызвано тем, что Linux (в отличие от BSD) только передает отдельный аргумент команде хижины (в этом ENV случая).
Обнаружено через комментарий @rampion:
Что происходит, так это то, что ядро обрабатывает первый два символа файла, ищущего # !. Если они найдены, он пропускает все символы пробела , ища непробельный символ, и извлекает путь интерпретатора , который должен быть реальным исполняемым файлом, а не другим скриптом , хотя linux расширяет это, чтобы разрешить рекурсивную обработку скрипта . Обнаружив, что затем он переходит к первому непробельному символу , откуда переходит к следующему символу новой строки, а передает его как один аргумент команде. Нет никакой "оболочки" обработки кавычек или других метасимволов. Это все очень просто и грубо. Поэтому вы не можете вникнуть в там с параметрами. Вы получаете ровно один аргумент, включающий пробел, и 'perl -w' - это то, что ядро видит здесь и передает дальше.
Источник: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html