답변:
별명은 별명에 대한 모든 인수가 별명을 갖는 프로그램에 인수로 전달된다는 점에서 명령과 같습니다. 예를 들어, 경우 별칭이었다 ls
에 ls -la
, 다음을 입력 ls foo bar
것이 정말 실행 ls -la 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 "$@"
}
별명 솔루션
실제로 함수 자체를 사용하지 않으면 다음을 사용할 수 있습니다.
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
당신은 대체 할 수 $@
와 함께 $1
당신은 단지 첫 번째 인수를 원하는 경우.
설명
이것은 f
인수로 전달되는 임시 함수를 만듭니다 .
별명 인수는 끝에 만 전달됩니다. 참고는 f
별명의 맨 끝에라고합니다.
이 unset -f
별칭은 별칭이 실행될 때 함수 정의를 제거하므로 나중에 중단되지 않습니다.
wrap_args x y z
bash : 예기치 않은 토큰 근처의 구문 오류`( '
f
별칭을 가졌다 . 일단 앨리어싱 제거 f
하면 제대로 작동합니다. 옛 이름 충돌 것.
command type f
:)
현재 답변에 덧붙여서, 별명이 작동하는 방식에 대해 알아야 할 중요한 것은 별명을 지은 명령 뒤에 입력 한 모든 매개 변수가 문자 그대로 사용된다는 것입니다. 따라서 두 명령에 대해 별명을 사용할 수있는 방법이 없습니다 (파이핑 여부에 관계없이). 명확히하기 위해 예상대로 작동하지 않는 예가 있습니다.
alias lsswp="ls -l | grep swp"
( 이 질문에서 영감을 얻은 예 ) 항상 현재 디렉토리 ls -l
에서 수행 된 출력을 사용하고 그에 대한 grep을 수행합니다.
lsswp / tmp /
같 ls -l | grep swp /tmp/
거나 같지 않습니다 ls -l /tmp/ | grep swp
.
인수가 중간 어딘가에 사용되어야하는 모든 목적을 위해서는 function
대신 을 사용해야합니다 alias
.
실제로 아무것도 할 필요가 없습니다. 별명은이를 자동으로 수행합니다. 예를 들어 :
$ alias less="less -eirqM"
$ less foo.txt
foo.txt의 첫 페이지가 표시 less
되고 EOF (-e)에서 종료되고 검색은 대소 문자를 구분하지 않습니다 (-i) 등입니다.
나는 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
sh
이 정의되어my_program_wrapper() { ...; }
있습니다. Bash는 키워드를 처리function
하지만 더 이식성 이 좋은 키워드 는 무엇입니까?