저는 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
}