bash 별칭은 줄 시작 부분에서만 작동합니까?

bash 별칭은 줄 시작 부분에서만 작동합니까?

먼저, 나는 달렸다touch file.txt

다음으로 다음 명령을 실행했습니다.

alias xx="file.txt"
vim xx

예상되는 동작: vim 로드 file.txt. 실제 동작: vim은 새 파일을 로드합니다 xx.

왜? 별칭은 줄의 시작 부분에서만 작동하기 때문입니까? 예를 들어 내가 입력하면

xx

그런 다음 교체를 수행하고 출력합니다 zsh: command not found: file.txt. 따라서 이 경우 별칭이 작동합니다.

답변1

일반적인 별칭은 bash또는 zsh(대신 사용하고 있는 것으로 보이는 쉘 )에서 bash명령의 별칭을 지정하는 것을 의미하며 줄의 시작 부분에 있는 명령 위치에서만 확장되고 , ;, |, &, &&// if/ 뒤에도 확장됩니다 then. .. 등, 또는 값이 공백으로 끝나는 별칭 뒤에.elsewhile

후자는 다음과 같이 할 수 있습니다.

alias sudo='sudo '
alias ll='ls -l'

그런 다음 다음을 수행하십시오.

sudo ll

쉘의 경우 sudo ls -l.

그럼에도 불구하고 zsh, 당신은 또한글로벌별칭은 다음과 같습니다.

alias -g xx=file.txt

그런 다음 구분 기호로 발견되는 위치 xx로 변경합니다 file.txt(따옴표를 제거하기 전).

echo xx

그러면 가 실행됩니다 echo file.txt. 별칭은 echo xxy또는 에서 확장 되지 않지만 echo "xx"다음을 수행할 수도 있습니다.

alias -g '"xx"=hello; echo world'

그런 다음 이 두 명령 echo "xx"으로 변경 하고 실행합니다.echo hello; echo worldecho

여기서 별칭이 아닌 변수를 사용하려는 것 같습니다.

xx=file.txt
vim "$xx"

(Bash에서는 따옴표가 필요하며 zsh로 단축할 수 있습니다 vim $xx.)

별칭은 기능이 없는 1970년대 후반의 쉘인 csh의 기능입니다. bash 및 zsh와 같은 Bourne 유사 셸(bash 및 zsh는 csh에서 대부분의 기능을 빌린 두 개의 Bourne 유사 셸임에도 불구하고) 기능을 사용할 수 없는 특정한 경우(예: alias forever='while true; do'또는 alias fail='return 1'...


1 역시 1970년대 후반의 Bourne 쉘에는 원래 기능이나 별칭이 없었지만 1983년경 직후에 기능이 추가되었습니다. 다른 기능을 갖춘 쉘인 csh의 인기는 별칭 및 기록 확장(그리고 이것이 자유 소프트웨어라는 사실)에 크게 기여했습니다. 큰 결함) 이러한 기능이 다른 Bourne과 유사한 쉘에서도 작동하는 이유를 설명합니다. 별칭(역사적 확장이 아님)은 sh(ksh 기반 하위 집합)에 대한 POSIX 사양에도 포함되었습니다. 이러한 별칭으로 정상 언어를 공식화하는 것은 거의 불가능하기 때문에 유지관리자는 매우 유감스럽습니다. 시도도 있었죠거기에서 그들을 얕보아라

답변2

  1. 당신은 말했지만 bash오류 메시지는 zshbash가 아닌 .zsh에서 온 것입니다. zsh와 bash는 둘 다 비슷하지만 동일하지는 않은 구문을 가진 쉘입니다. 대체로 호환되지만 100%는 아닙니다. zsh는 bash가 할 수 있는 몇 가지 작업을 수행할 수 있고, bash는 zsh가 수행할 수 없는 몇 가지 작업을 수행할 수 있습니다. 대부분의 경우 zsh는 bash보다 더 많은 기능과 향상된 기능을 제공합니다.

  2. 에서 man bash:

별명

별칭을 사용하면 단어로 사용될 때 단어 대신 문자열을 사용할 수 있습니다.첫 번째간단한 명령.

쉘은 내장 명령을 사용하여 설정 alias및 설정 해제 할 수 있는 별칭 목록을 유지 관리합니다 (아래 SHELL 내장 명령 참조).unalias

각 단순 명령의 첫 번째 단어(따옴표가 없는 경우)를 검사하여 별칭이 있는지 확인합니다. 그렇다면 해당 단어는 별칭의 텍스트로 대체됩니다. [...]

전체 지침을 읽으려면 실행 man bash하고 검색하세요 ^ALIASES. 별칭에 대한 zsh 관련 정보를 보려면 다음으로 시작하는 man zshbuiltinsand 를 실행하고 검색하세요 .aliasman zshmisc^ALIASING

앨리어싱

쉘 입력의 각 한정 단어를 검사하여 별칭이 정의되어 있는지 확인합니다. 그렇다면 명령 위치에 있거나(간단한 명령의 첫 번째 단어일 수 있는 경우) 별칭이 전역인 경우 별칭의 텍스트로 대체됩니다.

대체 텍스트가 공백으로 끝나면 쉘 입력의 다음 단어는 항상 별칭 확장의 목적으로 사용됩니다. [...]

관련 정보