"$@"
학습용 으로 명령어 중간에 매개변수를 삽입하려고 합니다 . 이것이 최적인지는 모르겠지만 이것이 제가 하려고 했던 것입니다. 이것이 내가 가진 것입니다: 내가 그것을 실행하면, 내가 인쇄하고 싶은 것이 test.sh foo
실행됩니다 . 대신 인쇄 중입니다 . 이것이 예상된 동작인지 또는 어떻게 해야 하는지 모르겠습니다.echo "$@" bar
foo bar
bar 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
행을 포함합니다.
바라보다:
- 별칭, 함수, 스크립트
- Bash에서 언제 별칭을 사용하고, 언제 스크립트를 사용하고, 언제 함수를 작성합니까?
- 별칭에 매개변수를 전달하는 방법은 무엇입니까?
- Bash 참조: 6.6 별칭
(*는 test
와 같은 표준 명령이므로 [ .. ]
...글쎄, 이런 종류의 테스트 목적으로는 사용하지 않는 것이 가장 좋습니다.)