# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # these are ok function a=2 { printf "FUNCNAME: %s\n" $FUNCNAME } function 11111 { printf "FUNCNAME: %s\n" $FUNCNAME } # but this is still not function sys$read { printf "FUNCNAME: %s\n" $FUNCNAME } declare -f set -o posix declare -f set +o posix a\=2 <(:) () { echo $FUNCNAME } \<\(:\) type '<(:)' break() { echo inside function $FUNCNAME } testfunc() { echo type type break type -t break echo command -v command -v break echo command -V command -V break echo type -a type -a break echo declare declare -f break echo execution break } set -o posix echo posix mode: testfunc set +o posix echo default mode: testfunc unset -f testfunc break # but in posix mode, declaring such a function is a fatal error ( set -o posix break() { echo FUNCNAME: $FUNCNAME } echo after ) # in posix mode, functions whose names are invalid identifiers are # no longer fatal errors ( set -o posix !! () { fc -s "$@" ; } type \!\! ) # you can create such functions and print them in posix mode set -o posix !! () { fc -s "$@" ; } type '!!' set +o posix