.bashrc에서 내보낸 함수는 케이스 모드에 대한 예상치 못한 토큰을 제공합니다.

.bashrc에서 내보낸 함수는 케이스 모드에 대한 예상치 못한 토큰을 제공합니다.

저는 Ubuntu 18.04 LTS와 Gnu Bash 5를 사용하고 있습니다.

다음 오류가 발생합니다.

/bin/bash: printm: line 56: syntax error near unexpected token `('
/bin/bash: printm: line 56: ` +([[:digit:]]))'
/bin/bash: error importing function definition for `printm'

이 함수는 내 .bashrc에서 내보내집니다. make설치하면 실행 awk되고 오류가 뜹니다. 하지만 기능을 테스트해 보면 문제 없이 작동합니다.

패턴이 끝나면 내가 누락되었을 수도 있다고 생각했습니다. 뭔가 다른 일이 벌어지고 있는 게 틀림없어요.

누군가가 사용을 제안했습니다.

shopt -s extglob

그러나 이를 사용해도 문제가 해결되지 않았습니다.

이것은 코드입니다

printm ()
{
 local sgr=$(tput sgr0)
 local blu=$(tput bold)$(tput setaf 39)
 local grn=$(tput bold)$(tput setaf 46)
 local cyn=$(tput bold)$(tput setaf 51)
 local red=$(tput bold)$(tput setaf 196)
 local mgn=$(tput bold)$(tput setaf 201)
 local org=$(tput bold)$(tput setaf 208)

 local  captr=0  arg=""
 local  opts=""  shortopts=""  longopts=""
 local  vb=1  ctp=""  cn=0  nl=0
  
 captr=0
 for arg in "$@"; do
   if [[ "$arg" == "-v" ]]; then
     captr=1
     continue
   elif (( captr == 1 )); then
     [[ "$arg" =~ ^[[:digit:]]+$ ]] && vb="$arg"
     captr=0 
   fi
 done

 shortopts="Vuhv::H::w::e::"
 shortopts="${shortopts}n::,l::,b,g,c,r,m,o"

 longopts="version,usage,help,verbosity::"
 longopts="${longopts},blu,grn,cyn,red,mgn,org"
 longopts="${longopts},heading::,warning::,error::"

 opts=$( getopt -o "$shortopts" -l "$longopts" -n "${0##*/}" -- "$@" )

 getopt_errcode=$?
 if (( getopt_errcode >= 1 )); then
   printf '%s%s%s\n' $red "Catched getopt_errcode" $sgr
 fi
 
 eval "set -- $opts"
 while (( $# > 0 )); do
   case $1 in
     ("-V"|"--version")
       local -r date="V01 2021 Jul 21 Wk27" 
       printf "%s\n\n" "$date"
       return
       ;;
     ("-u"|"--usage")
       printf '%s\n' "-V, --version, -u, --usage, -h, --help"
       return
       ;;
     ("-h"|"--help")
       return
       ;;
     ("-v"|"--verbosity")
       case "$2" in
         (+([[:digit:]])) vb="$2" ; shift 2 ;;
         (*)              vb=2 ; shift 2 ;;
       esac
       ;;
     ("-n")
       case "$2" in
         (+([[:digit:]])) cn="$2" ; shift 2 ;;
         (*)              cn=208 ; shift 2 ;;
       esac
       nl=1 ; ctp=$(tput bold)$(tput setaf $cn)
       ;;
     ("-l")
       case "$2" in
         (+([[:digit:]])) nl="$2"; shift 2 ;;
         (*)              nl=1 ; shift 2 ;;
       esac
       ;;
     ("-b"|"--blu") ctp="$blu" ; shift ;;
     ("-g"|"--grn") ctp="$grn" ; shift ;;
     ("-c"|"--cyn") ctp="$cyn" ; shift ;;
     ("-r"|"--red") ctp="$red" ; shift ;;
     ("-m"|"--mgn") ctp="$mgn" ; shift ;;
     ("-o"|"--org") ctp="$org" ; shift ;;
     ("-H"|"--heading")
       ctp="$mgn"
       case "$2" in
         (+([[:digit:]]))  nl="$2" ; shift 2 ;;
         (*)               nl=1    ; shift 2 ;;
       esac
       ;;
     ("-w"|"--warning")
       ctp="$blu"
       case "$2" in
         (+([[:digit:]]))  nl="$2" ; shift 2 ;;
         (*)               nl=1    ; shift 2 ;;
       esac
       ;;
     ("-e"|"--error")
       ctp="$red"
       case "$2" in
         (+([[:digit:]]))  nl="$2" ; shift 2 ;;
         (*)               nl=1    ; shift 2 ;;
       esac
       ;;
     ("--") shift ; break ;;
     (*) opt_error=1 ; break ;;
   esac
 done
}

관련 정보