별칭에 매개변수를 전달하는 방법은 무엇입니까?

별칭에 매개변수를 전달하는 방법은 무엇입니까?

Bash 스크립트의 경우 매개변수에 액세스하는 데 사용할 수 있습니다 "$@". 별칭을 사용할 때 동등한 것은 무엇입니까?

답변1

별칭 솔루션

함수 자체를 사용하는 것을 정말로 반대하는 경우 다음을 사용할 수 있습니다.

$ alias wrap_args='f(){ echo before "$@" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

첫 번째 매개변수만 필요한 경우 $@로 대체할 수 있습니다.$1

설명하다

이렇게 하면 임시 함수가 생성되고 f매개변수가 전달됩니다.

Alias ​​매개변수는 마지막에만 전달됩니다. f별칭 끝에서 호출된다는 점에 유의하세요 .

unset -f함수 정의는 별칭이 실행될 때 제거되므로 실행 후에도 멈추지 않습니다.

답변2

별칭은 모든 인수가 별칭을 붙인 프로그램에 인수로 전달된다는 점에서 명령과 같습니다. 예를 들어:

alias ls='ls -l -a -t -r'
# This now executes 'ls -l -a -t -r foo bar'
ls foo bar

인수가 해석되는 방식을 실제로 제어하려면 다음과 같은 함수를 작성할 수 있습니다.

my_program_wrapper() {
    local first_arg=$1 \
          second_arg=$2

    shift 2 # get rid of the first two arguments

    # ...

    /path/to/my_program "$@"
}

답변3

현재 답변 외에도 별칭 작동 방식에 대해 알아야 할 중요한 점은 별칭 명령 다음에 입력하는 모든 인수가 문자 그대로 끝에 사용된다는 것입니다. 따라서 인수가 첫 번째 명령으로 해석되어야 하는 두 명령(파이프라인 여부)에 별칭을 사용할 수 없습니다. 명확성을 위해 예상대로 작동하지 않는 예는 다음과 같습니다.

alias lsswp="ls -l | grep swp"

(다음에서 영감을 얻은 예이 문제ls -l) 이는 항상 실행된 출력을 사용합니다.현재의디렉토리와 grep - 그러니 사용하세요

lsswp /tmp/

ls -l | grep swp /tmp/ 와 동등할 것이다아니요 ls -l /tmp/ | grep swp.

매개변수가 중간 어딘가에 사용되어야 하는 모든 목적에 대해 다음을 사용해야 합니다.기능별칭보다는.

답변4

나는 csh에 응답하고 있습니다 :

예, 별칭에 매개변수를 사용할 수 있으며 위에서 설명한 것과는 달리 별칭 정의의 끝뿐만 아니라 어디에서나 매개변수를 참조할 수 있습니다.

tar-gz -ing의 예:

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, 여기서 !:1!:2는 별칭을 호출할 때 제공되는 매개변수입니다.

사용 예:

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

이것이 본질적으로 의미하는 바는 tar 명령의 어느 곳에나 삽입된 두 개의 인수를 사용하여 별칭으로 만들었다는 것입니다.tgz

관련 정보