UNIX 시스템에서 실행되도록 설계된 휴대용 래퍼 스크립트의 경우(꼭 리눅스일 필요는 없음), 이 명령이 배열 구문보다 우선 shift
해야 합니까 ?
#!/bin/sh
exec command ${1+"$@"}
비교:
#!/bin/sh
shift
exec command "$@"
답변1
exec command ${1+"$@"}
와 동일하지 않습니다 shift; exec command "$@"
. 후자는 첫 번째 매개변수를 제거하지만 첫 번째 매개변수는 제거하지 않습니다.
그것이 하는 일은 ${1+"$@"}
if 세트의 확장만 적용한다는 것입니다. POSIX 호환 쉘에서는 아무런 차이가 없습니다. 위치 인수가 설정되지 않으면 아무 것도 확장되지 않아야 하기 때문입니다(위치 인수가 설정되어 있으면 목록에 "구멍"이 있을 수 없습니다). 그러나 제가 이해하는 바에 따르면, 더 오래된 포탄 중 일부에는 가드가 필요할 수 있습니다."$@"
$1
"$@"
$1
반면 ksh/zsh/Bash에서는 "${@:2}"
위치 인수가 처음부터 제공되므로 $2
실제로 목록을 수정하지 않고 첫 번째 인수를 먼저 이동하는 것과 유사합니다.