.bash_profile: 260행: 예상치 못한 토큰 `(' 근처에서 구문 오류가 발생했습니다.

.bash_profile: 260행: 예상치 못한 토큰 `(' 근처에서 구문 오류가 발생했습니다.

나는 bash 기능을 가지고 있습니다 :

WORKING_REACT_EXAMPLES="$HOME/tutorials/javascript/react/working-react-examples"
dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall $1; cd $WORKING_REACT_EXAMPLES ;}

내 다른 기능과 비슷해 보입니다. .bashrc 소스를 얻으려고 하면 다음과 같은 결과가 나타납니다.

$ src
-bash: /Users/cchilders/.bash_profile: line 260: syntax error near unexpected token `('
-bash: /Users/cchilders/.bash_profile: line 260: `dualpush() { cd $WORKING_REACT_EXAMPLES; cmpushall "$1"; cd ..; cmpushall "$1"; cd $WORKING_REACT_EXAMPLES ;}'

Shellcheck는 큰따옴표로 경고하지만 오류는 표시하지 않으므로 그렇게 합니다.

dualpush() { cd "$WORKING_REACT_EXAMPLES"; cmpushall "$1"; cd ..; cmpushall "$1"; cd "$WORKING_REACT_EXAMPLES" ;}

같은 오류가 발생합니다

구문 오류의 원인은 무엇입니까? 감사합니다

답변1

이는 일반적으로 함수 이름이 이미 다음과 같이 정의된 경우에 발생합니다.별명매개변수로.

별칭 대체는 쉘 구문 분석 초기에 발생하므로 함수 선언(및 기타 사항)에도 영향을 미칩니다. 예를 들어 다음과 같은 상황이 발생했다면...

alias dualpush="push; push --again"

dualpush() { push; push --again; }

...그러면 다음과 같이 확장됩니다.

push; push --again() { push; push --again; }

원래 별칭이 명령으로 끝나는 경우없이매개변수가 여전히 작동하지만 함수가 잘못된 이름으로 정의되었습니다(다른잠재적인 놀라움!). 그러나 해당 별칭의 마지막 명령이가지다일부 인수를 사용하면 확장이 더 이상 함수 선언으로 인식되지 않습니다. 대신 ()명령줄 인수 중간에 나타나며 파서에서 거부됩니다.

답변2

터미널을 닫으면 똑같은 명령이 작동합니다. Mac에는 bash 기능을 사용할 때 결함이 있으며, dualpush주석 처리된 bashrc를 소싱한 후에도 터미널에 남아 있습니다. 전체 터미널을 다시 시작하면 동일한 명령이 작동합니다. 나는 이 불쌍한 행동을 이해하지 못하지만 우분투에서는 이런 일이 일어나지 않습니다

관련 정보