존재하다foo.sh, 더 쉽게 읽을 수 있도록 일부 명령(또는 기능)을 여러 줄로 나누고 주석을 추가했습니다.
#!/bin/zsh
#
# foo.sh: print computer information
foo() {
uname \
-p `# processor arch` \
-s `# os name` \
-v `# os version`
}
foo
무슨 일이 일어나는지
나는 잘 달릴 수 있다:
$ ./foo.sh
Darwin 123... (correct output)
작동하지 않는 것
그러나 source
OR을 사용하여 가져오면 .
쉘 자체는 내가 지정한 인수( )를 사용하여 명령을 성공적으로 실행하지만 다음 오류를 보고합니다 -psv
.
% . ./foo.sh
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
./foo.sh:2: command not found: #
Darwin 123... (correct output as before)
왜 이런 일이 발생하는지 알고 싶습니다. 어떻게 해결할 수 있나요? 내 주요 목표는 일부 함수를 정의하고, 가져오고, 필요에 따라 셸에서 호출하는 것입니다. 감사합니다!
답변1
기본적으로 zsh는 대화형으로 실행될 때가 아닌 스크립트의 주석만 인식합니다. 이는 소스 스크립트에서 작동하지만 최근 버전에서는(5.8에서 이 동작을 재현했지만 5.4.2에서는 코드를 정상적으로 허용함) 로드 후 구문 분석되는 일부 코드(예: 명령 대체 코드)에서도 작동합니다. 이는 버그일 수 있습니다.
놓다setopt interactive_comments
대화형으로 실행할 때 주석을 지원합니다 .zshrc
. 여기에는 실제로 단점이 없습니다. 즉, #
단어 시작 부분에 인용해야 하지만 #
명령줄에서 단어 시작 부분에는 거의 인용하지 않아야 한다는 의미입니다. (주석은 단어 내에서 시작되지 않으므로 와일드카드로 사용하거나 매개변수 확장에 영향을 주지 않습니다 #
.)#
extended_glob
대안으로(또는 추가로) 다음을 추가하세요.
setopt local_options interactive_comments
함수 내부. 그런 다음 댓글이 작동합니다.