예기치 않은 표시 '{' 근처에 구문 오류가 있습니다.

예기치 않은 표시 '{' 근처에 구문 오류가 있습니다.

새로운 가상 터미널을 실행할 때마다 다음으로 끝납니다.

bash: /usr/share/bash-completion/bash_completion: line 226: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 226: `}'
kimifish@kimipc:~$ 

하지만 파일은 bash_completion괜찮은 것 같습니다(물론 그렇지 않습니다).수직 막대가 있어서 죄송합니다. 이것은 단지 vim 탭 강조 표시일 뿐입니다.:

     ...
     186 # Assign variables one scope above the caller
     187 # Usage: local varname [varname ...] &&
     188 #        _upvars [-v varname value] | [-aN varname [value ...]] ...
     189 # Available OPTIONS:
     190 #     -aN  Assign next N values to varname as array
     191 #     -v   Assign single value to varname
     192 # Return: 1 if error occurs
     193 # See: http://fvue.nl/wiki/Bash:_Passing_variables_by_reference
     194 _upvars()
     195 {
     196     if ! (( $# )); then
     197     |   echo "${FUNCNAME[0]}: usage: ${FUNCNAME[0]} [-v varname"\
     198     |   |   "value] | [-aN varname [value ...]] ..." 1>&2
     199     |   return 2
     200     fi
     201     while (( $# )); do
     202     |   case $1 in
     203             -a*)
     204     |   |   |   # Error checking
     205     |   |   |   [[ ${1#-a} ]] || { echo "bash: ${FUNCNAME[0]}: \`$1': missing"\
     206     |   |   |   |   "number specifier" 1>&2; return 1; }
     207     |   |   |   printf %d "${1#-a}" &> /dev/null || { echo "bash:"\
     208     |   |   |   |   "${FUNCNAME[0]}: \`$1': invalid number specifier" 1>&2
     209     |   |   |   |   return 1; }
     210     |   |   |   # Assign array of -aN elements 
     211     |   |   |   [[ "$2" ]] && unset -v "$2" && eval $2=\(\"\${@:3:${1#-a}}\"\) &&
     212     |   |   |   shift $((${1#-a} + 2)) || { echo "bash: ${FUNCNAME[0]}:"\
     213     |   |   |   |   "\`$1${2+ }$2': missing argument(s)" 1>&2; return 1; }
     214     |   |   |   ;;
     215             -v) 
     216     |   |   |   # Assign single value
     217     |   |   |   [[ "$2" ]] && unset -v "$2" && eval $2=\"\$3\" &&
     218     |   |   |   shift 3 || { echo "bash: ${FUNCNAME[0]}: $1: missing"\
     219     |   |   |   "argument(s)" 1>&2; return 1; }
     220     |   |   |   ;;
     221             *)  
     222     |   |   |   echo "bash: ${FUNCNAME[0]}: $1: invalid option" 1>&2
     223     |   |   |   return 1 ;;
     224         esac
     225     done
     226 }
     ...

오류를 어디서 찾아야 할지 전혀 모르겠습니다...

~/.bashrcbash 완성에 관한 나의 부분:

  91 if ! shopt -oq posix ; then
  92   if [ -f /usr/share/bash-completion/bash_completion ]; then
  93     . /usr/share/bash-completion/bash_completion
  94   elif [ -f /etc/bash_completion ]; then
  95     . /etc/bash_completion
  96   fi
  97 fi

섹션별로 코드를 제거하면 몇 가지 정보가 드러났습니다. " while" 루프를 자르면 오류가 제거되었지만 " case" 구조만 자르면 오류가 제거되지 않았습니다. =/

답변1

한 가지 가능한 설명은 다음과 같습니다.

alias done='something'

구매하기 전에 /usr/share/bash-completion/bash_completion.

이것은 오류 메시지를 설명합니다. bash함수가 닫혔다고 불평하지만 while루프는 아직 닫히지 않았습니다( done대체 부족으로 인해 something).

done또는 쉘 키워드를 별칭으로 사용하지 마십시오 ( alias do='do ((loop_level++));'; alias done='((loop_level--)); done'쉘 구조를 유지하는 한 일부 기기 별칭을 정의할 수는 있지만).

관련 정보