Перечислите все функции оболочки, за исключением частных функций, которые начинаются с одного или двух символов подчеркивания (например, «_func» или «__func”)

#r #bash #function #shell

#r #bash #функция #shell

Вопрос:

Я использую этот псевдоним для перечисления всех функций:

alias ls-funcs='compgen -A function'

Небольшой пример результата:

 __youtube_dl          # Two underscores.
_add_composure_file   # One underscore.
search                # My function, No underscores.
  

Из этих функций «поиск» принадлежит мне, остальные — встроенные / частные функции,
как можно исключить эти встроенные / частные функции и просто перечислить мои собственные пользовательские функции?

Комментарии:

1. either one or two underscores итак, начните с единицы. Функция, которая начинается с двух, также начинается с единицы…

Ответ №1:

Передать в grep , чтобы исключить имена, начинающиеся с _ .

 alias my-funcs="compgen -A function | grep -v '^_'"
  

Комментарии:

1. @5c0tt Я думал, что вы перечисляете функции оболочки. Нравится typeset -F | awk '$3 ~ /^[^_]/{print $3}'

Ответ №2:

Чтобы не зависеть от R-base compgen и быть совместимыми с Bash, Ksh или Zsh:

 alias ls-funcs=$'typeset -f | awk 'BEGIN{FS="("}/^[^_[:space:]{}].*()/{print $1}''
  

Немного длиннее, но немного надежнее:

 alias ls-funcs=$'typeset -f | awk 'match($0,/(^[[:alnum:]-:][[:alnum:]_-:]*)[[:space:]]*()/,m){print m[1]}''