#bash #terminal #declare
#bash #терминал #объявить
Вопрос:
При перечислении всех определенных функций в системе перед именем каждой функции добавляется declare -f
:
bash4.3 declare -F | head
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __git_eread
...
В качестве доказательства концепции я пытаюсь определить функцию как:
bash4.3 declare -f 'count() { ls -1 | wc -l; } '
bash4.3 declare -F | grep -w count
bash4.3 count() { ls -1 | wc -l; }
bash4.3 declare -F | grep -w count
declare -f count
В приведенном выше выводе только определение, которое распознается, когда функция определена без declare
. Правильно ли я понимаю, что declare
built-in не используется для объявления функции?
Комментарии:
1. Кстати, тег «terminal» предназначен для вопросов о терминалах . Для целей bash терминал — это то, что собирает входные данные для оболочки или отображает выходные данные оболочки — в современной графической системе это программа, которая отображает окно с текстом в нем; в старых системах это была физическая часть оборудования с клавиатурой и экраном(или, до того, как широко использовались стеклянные TTYS, клавиатура и принтер).
2. Но сама оболочка не является частью терминала, а терминал не является частью оболочки; тег терминала следует использовать для вопросов о проблемах с отображением текста в заданном цвете или шрифте; или включение или выключение локального эха; или другие проблемы, связанные с вещами, за которые отвечает сам терминалдля выполнения — не с проблемами с логикой программы, вывод которой терминал отвечает за отображение, когда проблема не связана с самим отображением.
Ответ №1:
Это незаконно. Из https://wiki.bash-hackers.org/commands/builtin/declare , под таблицей кодов ошибок:
------------- --------------------------------------------
| Exit status | Reason |
------------- --------------------------------------------
| != 0 | Attempting to define a function using `-f` |
------------- --------------------------------------------
Комментарии:
1. Спасибо за ответ! Просто чтобы уточнить, почему список функций отображается с добавлением declare -f?
2. Если вы используете
declare -F
, это не так .declare -f
никогда не ожидается, что будет выводиться что-то, что может быть использовано для переопределения функции — в конце концов, тела там нет.