zshrc의 Zsh 오류 교체 오류

zshrc의 Zsh 오류 교체 오류

내 .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인식하지 못하기 때문에 이러한 놀라움에 대해 불평합니다 .aslongaswhile

관련 정보