내 .zhsrc 파일에 다음이 있습니다.
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
키보드에서 Home을 누르면 줄의 시작 부분으로 이동하는 것 같아서 제대로 작동하는 것 같지만 vim에서 .zshrc를 편집하고 저장할 때마다 SyntasticCheck zsh에서 "잘못된 대체" 오류를 보고합니다.
이것은 내 실수인가요, 아니면 문법 검사기의 버그인가요?
댓글에 대한 편집자의 답변:
아니요, Zsh가 시작될 때 오류가 발생하지 않습니다. 예, 구문 검사기는 해당 줄에 오류가 있다고 말합니다.
$ sed -n /Home/l .zshrc
key[Home]=${terminfo[khome]}$
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-o\
f-line$
편집 2. zsh -vn .zshrc의 출력
.zshrc 파일을 다음과 같이 정리했습니다.
echo OK
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
echo OK2
셸을 시작하면 OK와 OK2가 표시되며 오류는 표시되지 않습니다. 그러나 이것은 zsh -vn .zshrc의 출력입니다.
# /etc/zsh/zshenv: system-wide .zshenv file for zsh(1).
#
# This file is sourced on all invocations of the shell.
# If the -f flag is present or if the NO_RCS option is
# set within this file, all other initialization files
# are skipped.
#
# This file should contain commands to set the command
# search path, plus other important environment variables.
# This file should not contain commands that produce
# output or assume the shell is attached to a tty.
#
# Global Order: zshenv, zprofile, zshrc, zlogin
if [[ -z "$PATH" || "$PATH" == "/bin:/usr/bin" ]]
then
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
echo OK
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line
.zshrc:2: bad substitution
편집 3
버전: zsh 5.0.7(x86_64-pc-linux-gnu)
답변1
zsh
이는 5.1에서 수정된 일부 이전 버전의 버그였습니다. 변경 로그:
2015-07-15 바튼 셰이퍼
- 35799: Src/params.c: NO_EXEC를 사용하면 매개변수 아래 첨자 표현식을 구문 분석하여 중괄호 균형을 올바르게 맞추지만 아래 첨자를 적용하지는 않습니다.
뒤쪽에보고된다같은 날.
이러한 버전을 사용하면 다음 명령을 사용하여 복사할 수 있습니다.
$ zsh -nc '${a[1]}'
zsh:1: bad substitution
git bisect
해당 취약점은 2011년에 발생한 것으로 알려져 있습니다 .연관 배열과 관련된 유사한 문제 수정제출 중dfc26195c916d54163a3f0dd2eb159db2d974569, zsh-4.3.12 버전부터 시작
보다 일반적으로 zsh -n
(또는 anyshell -n
)의 코드 린트 기능은 코드를 실행하지 않기 때문에 다소 제한적입니다. 따라서 일부 코드가 미리 실행되는 일부 코드에 따라 평가되는 방식이 달라지는 영역에서는 많은 작업을 수행할 수 없습니다.
예를 들어 ${a[1+]}
배열에서는 작동하지 않지만 해시에서는 작동합니다. 어느 것이 zsh -n
불평하지 않는지 확실하지 않습니다.
또한 다음과 같은 오탐지를 제공할 수도 있습니다.
alias aslongas=while
aslongas whatever; do
something
done
별칭을 do
인식하지 못하기 때문에 이러한 놀라움에 대해 불평합니다 .aslongas
while