.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
}

関連情報