почему 'echo --help' не дает мне страницу помощи echo?

20

Я попробовал 'man echo' в Bash, и он сказал мне, что 'echo --help' покажет справку, затем выйдет, и, аналогично, 'echo --version' выведет версию и выйдет. Но почему это не работает? 'echo --help' просто печатает буквально '--help'.

booksee
источник
2
Обратите внимание, что создание справочного сообщения echo --helpявляется ошибкой . Представьте, что произойдет, если вы это сделаете: printf "The option you entered is: " ; echo "$opt"и переменная оболочки opt, как оказалось, содержит текст --help. Согласно стандарту POSIX, echoтакое поведение не разрешено, но эхо GNU неприятно несоответствующее.
R ..
1
@R .. Так что echo -eи echo -nэто тоже ошибка, по вашей логике?
Tyilo
@Tyilo: см. Спецификацию в POSIX или мое освещение проблемы здесь: etalabs.net/sh_tricks.html
R ..
@R .. Представьте, что произойдет, если вы это сделаете: printf "Опция, которую вы ввели:"; echo "$ opt" и переменная оболочки opt содержит текст -e или -n.
Тило
@Tyilo: Вместо повторного объяснения мне понравилась страница, где я уже объяснил ответ на этот вопрос.
R ..

Ответы:

26

man echoотносится к echoпрограмме . GNU echo поддерживает в --helpопции, как и некоторые другие. Когда вы работаете echoв Bash, вы получаете его встроенную функцию,echo которая не работает.

Чтобы получить доступ к echoпрограмме, а не к встроенной, вы можете указать путь к ней:

/bin/echo --help

или используйте enableкоманду Bash, чтобы отключить встроенную версию:

$ enable -n echo
$ echo --help

Bash имеет встроенные версии многих основных команд, потому что это немного быстрее, но вы всегда можете обойти их, когда вам это нужно.

Майкл Гомер
источник
Служит мне право на использование zsh. enableработает, хотя.
Майкл Гомер
@MichaelHomer Так что некоторые встроенные версии могут отличаться от ... оригинальных? Если есть различия, то как называются все оригинальные команды, включая «программу эха», как вы упоминали? Или какой термин мы используем, чтобы отличить их от встроенных версий?
книга
1
@ booksee: Да, они могут отличаться. echoВ частности, GNU имеет множество расширений выше POSIX, а Bash - echoтолько несколько. На самом деле я не могу придумать общего названия для команд, которые могут быть скрыты встроенными командами. Есть не так много , что вам нужно один: echo, test, [, и pwdте , с которыми вы , вероятно, столкнуться.
Майкл Гомер
@Gnouc: Да, commandявно всегда вызывает buildins. Я не знаю, о чем я думал, кроме того, что zshэто работает иначе.
Майкл Гомер
2
"используйте команду включения Bash для отключения" да, ребята, это так
Braiam
10

В дополнение к другим ответам, вы можете использовать

$ help echo

Также см. краткую справку по встроенной echoкоманде.

Дмитрий Александров
источник
8

Вы используете echoвстроенную команду bash, которая не понимает --helpопцию. Использование:

/bin/echo --help

Чтобы увидеть помощь для встроенного echo, используйте man bashи ищите echo.

Грег Хьюгилл
источник
это сработало для меня
Hayden Thring