我正在使用 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
}