Должен ли я определить функцию, используя declare built-in?

#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 никогда не ожидается, что будет выводиться что-то, что может быть использовано для переопределения функции — в конце концов, тела там нет.