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