[shell] 쉘 별명에 명령 행 인수를 전달하는 방법은 무엇입니까?

명령 행 인수를 별명에 어떻게 전달합니까? 다음은 샘플입니다.

별명 mkcd = 'mkdir $ 1; cd $ 1; '

그러나이 경우 $ xx는 런타임이 아닌 별명 작성 시간에 변환됩니다. 그러나 다음과 같이 쉘 기능 (약간 인터넷 검색 후)을 사용하여 해결 방법을 만들었습니다.

함수 mkcd () {
  mkdir $ 1
  CD $ 1
}

CL 매개 변수를 허용하는 별명을 작성하는 방법이 있는지 알고 싶었습니다.
BTW-기본 쉘로 ‘bash’를 사용합니다.



답변

당신은 방법을 찾았습니다 : 별명 대신 함수를 만드십시오. C 쉘에는 별명에 대한 인수를 수행하는 메커니즘이 있지만 함수 메커니즘이 더 유연하고 동일한 기능을 제공하기 때문에 bash 및 Korn 쉘은 그렇지 않습니다.


답변

Bash 에서 다른 쉘에 대해 게시 된 내용을 반복하기 위해 다음 작업이 수행됩니다.

alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'

다음을 실행하십시오.

blah one two

아래 출력을 제공합니다.

First: one
Second: two


답변

ksh에서는 불가능하지만 csh에서는 가능합니다.

alias mkcd 'mkdir \!^; cd \!^1'

ksh에서 기능은 갈 길입니다. 그러나 정말로 별명을 사용하고 싶다면 :

alias mkcd='_(){ mkdir $1; cd $1; }; _'


답변

bash 맨 페이지를 인용하려면 :

대체 텍스트에 인수를 사용하는 메커니즘은 없습니다. 인수가 필요한 경우 쉘 기능을 사용해야합니다 (아래의 기능 참조).

그래서 당신이 당신의 자신의 질문에 대답 한 것처럼 보입니다-별칭 대신 함수를 사용하십시오


답변

이 명령이 유용 할 수도 있습니다.

mkdir dirname && cd $_

여기서 dirname은 만들려는 디렉토리의 이름입니다.


답변

함수를 ~/.cshrc파일 로 쓸 수 없다는 것을 알았습니다 . 여기에 인수를 취하는 별칭으로

예를 들어 ‘find’명령에 인수가 전달되었습니다.

alias fl "find . -name '\!:1'"
Ex: >fl abc

여기서 abc는! : 1로 전달 된 인수입니다.


답변

가장 쉬운 방법은 별칭이 아닌 함수를 사용하는 것입니다. cli에서 언제든지 함수를 호출 할 수 있습니다. bash에서는 함수 이름 () {command}를 추가하면 별칭과 동일하게로드됩니다.

function mkcd() { mkdir $1; cd $1 ;}

다른 껍질에 대해 잘 모름