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]