나는 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를 소싱한 후에도 터미널에 남아 있습니다. 전체 터미널을 다시 시작하면 동일한 명령이 작동합니다. 나는 이 불쌍한 행동을 이해하지 못하지만 우분투에서는 이런 일이 일어나지 않습니다