2

Я пытаюсь узнать о здесь-документы и здесь-строки. Я хотел бы понять, почему при выводе echo <<< more than one word первое слово пропускается. Например

> echo <<< more than one word
than one word
> echo <<< a b c
b c
>echo <<< "more than one word"
 -- <blank line> --

Такое же поведение не относится к cat:

>cat <<< "more than one word"
more than one word

Что я исследовал:

Википедия Здесь документ статьи. Честно говоря, я нахожу много заумных статей в Википедии, в том числе отмеченные; плюс их примеры не касались этой конкретной проблемы.

Мой дистрибутив:

>cat /proc/version 
Linux version 3.11.10-301.fc20.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 4.8.2 20131017 (Red Hat 4.8.2-1) (GCC) ) #1 SMP Thu Dec 5 14:01:17 UTC 2013

Я также не мог найти существующий вопрос о Super User по этой конкретной теме.

3 ответа3

1

<<< передает левую команду stdin с правой копией.

Это имеет значение для команды cat , которая печатает свой стандартный stdin когда в качестве аргумента не указано имя файла. Но это не имеет значения для echo который всегда игнорирует его стандартный stdin и выводит только его аргументы.

0

Я прочитал этот другой ответ несколько раз, и он мне не был понятен, пока я не понял, что <<< видит только a с правой стороны и отправляет его в команду stdin . Это означает

echo <<< a b c

эквивалентно

echo b c <<< a

или даже

<<< a echo b c

Т.е. b и c являются аргументами для echo даже если они следуют после <<< a (сравните эквивалентность cat -n < foo.txt , cat < foo.txt -n , < foo.txt cat -n).

Теперь утверждение

echo […] всегда игнорирует свой стандартный stdin и выводит только аргументы

выполняет объяснение.

-1

Хороший ответ здесь

Строка, которую вы вводите после «<<<», является разделителем текста. Вы используете три «<» вместо 2, что может вызывать интересное поведение, которое вы отмечаете. Если вы используете команду cat вместо echo, поведение будет больше, чем вы ожидаете.

В основном, слова «больше» и «а» используются в качестве флагов для определения окончания многострочной строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .