새 bash 명령(bash -c)에서 "$@" 특수 매개변수를 사용합니다.

새 bash 명령(bash -c)에서 "$@" 특수 매개변수를 사용합니다.

bash -c다음을 통해 상위 bash 스크립트의 매개변수에 의존하는 명령을 실행 하려고 합니다."$@"

저는 일반 명령을 실행할 때 "$@"각 매개변수에 대한 확장 마법을 수행하기 위해 bash를 사용합니다.

printf '[%s] [%s]\n' "$@"
$ ./script one "t w o"
[one] [t w o]

나의 첫 번째 순진한 탈출 시도는 이상한 방식으로 실패했습니다. $@왜냐하면 부모 bash가 현재 인수의 "끝"인 것처럼 보이기 때문입니다.

bash -c "printf '%s %s\n' \"$@\""
$ ./script one "t w o"
t w o": -c: line 1: unexpected EOF while looking for matching `"'
t w o": -c: line 2: syntax error: unexpected end of file

거기에서 "$@"그것은 실제로 인용된 것이 없고 bash가 낮은 수준 확장을 처리하고 있다고 추측하기 때문에 일반적인 이스케이프 기술에 어긋납니다 exec.

한 줄의 코드 "$@"에서 스크립트 매개변수를 사용하는 방법은 무엇입니까 bash -c?

답변1

이스케이프를 방지하려면 더미 인수를 포함하여 평소와 같이 부모에게 "$@"전달하십시오 ."$@"bash -c$0

bash -c 'printf "[%s] [%s]\n" "$@"' this-is-bash-dollar-zero "$@"
$ ./script one "t w o"
[one] [t w o]

관련 정보