별칭으로 숨겨진 경우 쉘 예약어를 사용하세요.

별칭으로 숨겨진 경우 쉘 예약어를 사용하세요.

별칭이 예약어를 숨기는 경우 해당 예약어에 어떻게 액세스할 수 있나요?

이것은 if잘 작동합니다:

% if : ; then echo true; fi
true

별칭 뒤 if:

% alias if=date
% if : ; then echo true; fi
zsh: parse error near `then'

접두사 builtin또는 \도움이 되지 않습니다:

% builtin if : ; then echo true; fi
zsh: parse error near `then'
% \if : ; then echo true; fi
zsh: parse error near `then'

별칭으로 인해 숨겨진 병리적인 경우 예약어에 액세스하는 방법은 무엇입니까?

답변1

힐리의 대답나한테 지적해줘POSIX 쉘 명령 언어 섹션 2.3.1이는 다음과 같이 말합니다.

그러나 올바른 구문 컨텍스트의 예약어는 별칭 대체 후보가 되어서는 안 됩니다.

{ba,z}sh기본 동작이 위 내용을 따르지 않음 을 확인했습니다 .

나는 물었다zsh-workers옵션으로 이동합니다 POSIX_ALIASES.매뉴얼 페이지설명하다:

  POSIX_ALIASES <K> <S>
          When this option is set, reserved words are not candidates for
          alias expansion:  it is still possible to declare any of them as
          an alias, but the alias will never be expanded.  Reserved words
          are described in the section RESERVED WORDS in zshmisc(1).

답변2

이 오류가 없는 셸을 사용해 보세요.

표준에 따르면 예약어는 별칭 확장을 받을 수 없습니다.

그래서:

alias if=echo
if : ; then echo true; fi

true인쇄를 위해 적절하게 작성된 쉘을 사용하십시오.

그러나 불행 bash하게도 여기서도 사실이 아니며 동작은 정확합니다 .ksh93boshdash

추가 힌트 제공:

  • 별칭 앞의 백슬래시는 적절하게 작성된 셸에서 별칭을 비활성화합니다.

  • 예약어 앞의 백슬래시는 토큰을 일반 단어로 만듭니다.

결과적 \if으로 별칭은 비활성화되지만 예약어가 아닌 단어가 됩니다.

관련 정보