명령 중간에 "$@" 삽입 매개변수를 만드는 방법은 무엇입니까?

명령 중간에 "$@" 삽입 매개변수를 만드는 방법은 무엇입니까?

"$@"학습용 으로 명령어 중간에 매개변수를 삽입하려고 합니다 . 이것이 최적인지는 모르겠지만 이것이 제가 하려고 했던 것입니다. 이것이 내가 가진 것입니다: 내가 그것을 실행하면, 내가 인쇄하고 싶은 것이 test.sh foo실행됩니다 . 대신 인쇄 중입니다 . 이것이 예상된 동작인지 또는 어떻게 해야 하는지 모르겠습니다.echo "$@" barfoo barbar foo

test.sh foo
# runs
echo "$@" bar
# which is printing
bar foo

편집하다:컨텍스트를 단순화했으며 실제로 사용하려고 합니다."$@" 별칭으로.

답변1

별칭은 단순한 대체일 뿐이며 자체적으로 매개변수를 사용하지 않습니다. 따라서 alias x='echo "$@" bar'(*) 가 있고 를 실행하면 x foo다음과 같이 끝납니다.

echo "$@" bar foo

즉, x별칭을 콘텐츠로 바꾸고 나머지는 끝에 유지하세요. 지금,"$@"실행 컨텍스트의 매개변수 목록 입니다.x foo. 일반적으로 인수 목록에 아무것도 없는 대화형 셸이 "$@"제거되었을 수 있습니다. 그러나 매개변수 목록(위치 매개변수)에 항목이 있으면 해당 위치에서 확장됩니다.

$ alias x='echo "$@" bar'
$ set -- args here
$ x foo
args here bar foo

대신 함수나 스크립트 파일을 사용하면 괜찮습니다. 다음과 같이 인쇄되어야 합니다 foo bar.

f() {
    echo "$@" bar
}
f foo

as는 다음과 같이 실행되어야 합니다 ./s.sh foo. if s.sh는 실행 가능하고 해당 echo행을 포함합니다.

바라보다:

(*는 test와 같은 표준 명령이므로 [ .. ]...글쎄, 이런 종류의 테스트 목적으로는 사용하지 않는 것이 가장 좋습니다.)

관련 정보