이후에는 새 별칭을 사용할 수 없습니다.


9

지금까지 쉘의 세미콜론은 줄 바꿈과 같은 의미를 가지고 있다고 생각했습니다. 그래서 나는

alias <name>=<replacement text>; <name>

<name>다음 줄에서 알려진 동안 알 수 없습니다. csh, tcsh, sh, kshbash동일하게 동작합니다. 적어도에 대한 csh후 별칭은 알려져 있지 않다 - 별명이 직접 또는 스크립트가 semccolon 전에 공급되는 경우에 사용되는 경우는 문제가되지 않습니다 ;하지만이 다음 명령 줄에 알려져있다. 이것이 버그입니까, 아니면이 동작입니까?


"쉘의 세미콜론은 줄 바꿈과 같은 의미를 갖는다 고 생각했습니다 . " 좀 빠지는!
궤도에서 가벼움 레이스

1
세미콜론과 줄 바꿈의 해석은 구문 분석기가 호출되는 방식에 따라 다릅니다. "dot"명령의 경우 Bourne Shell은 "NLFLG"를 사용하여 구문 분석기를 호출하여 일부 상황에서 줄 바꿈과 세미콜론을 동일하게 처리하도록 지시합니다. 그러나 다른 경우는 아닙니다. 일반적으로 세미콜론과 줄 바꿈은 줄 바꿈이있을 수 있으므로 세미콜론으로 구문 오류가 발생하는 것과 동일하지 않습니다.
schily November

답변:


9

사용중인 별명 구문은 POSIX 쉘에 적합하지 않으며 POSIX 쉘의 경우 다음을 사용해야합니다.

alias name='replacement'

그러나 모든 쉘의 경우, 구문 분석기 초기에 별명 대체가 수행되므로 이는 작동하지 않습니다.

별명 설정이 실행되기 전에 구문 분석기가 전체 행을 읽었으며이 때문에 명령 행이 작동하지 않습니다.

다음 명령 행에 별명이 표시되면 작동합니다.


또한 일부 쉘은 의 별칭을 확장 yash하거나 zsh확장하지 않습니다 shell -c 'alias name=replacement<newline>replacement'. AT & T의 ksh경우 소스 스크립트에 문제가 있습니다.
Stéphane Chazelas

이 경우에는 csh를 사용해야 합니다. 구문 =에는 사용 되지 않습니다 alias.
user3224237

@ user3224237-이것과는 아무런 관련이 없습니다 =. 별명이 확장 되기 전에 셸이 처음 라인을 볼 때 별명 확장이 발생하기 때문 입니다.
cas

@ Stéphane Chazelas "sourced"스크립트의 동작은 Bourne 쉘이 실행되기 전에 이러한 파일을 완전히 구문 분석하기 때문에 발생합니다. Ksh는 Bourne Shell 소스를 기반으로하며 변경되지 않은 모든 항목은 동일하게 작동합니다.
schily November

@schily, 예, 그것이 전체로 파싱되는 zsh/yash -c 'code'곳 과 동일한 이유입니다 code. Bourne 쉘의 경우는 아닌 것 같습니다. 따라서 Bourne 쉘 code이 한 번에 한 줄씩 구문 분석한다고 가정합니다 .
Stéphane Chazelas

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.