일부 매개변수를 구문 분석하는 일반 스크립트( )가 있습니다 common.sh
. 다른 스크립트에서는 import it 을 사용합니다 source common.sh
. 매개변수 구문 분석을 위해 아래 코드를 여러 번 사용할 수 있도록 $@
합계를 재설정하는 방법이 있습니까 ?$#
매개변수 구문 분석이 실행된 후에 사용할 수 있도록 먼저 원본 스크립트 매개변수를 저장합니다.
readonly script_args=("${@}")
그러나 이는 인수만 저장하므로 shift
매개변수 분석을 실행하기 위해 여러 번 사용할 수 없습니다.
매개변수 분석:
while [[ $# -gt 0 ]]; do
case "$1" in
--command=*)
command="${1#*=}"
;;
--project=*)
project="${1#*=}"
;;
--workspace=*)
workspace="${1#*=}"
;;
--account=*)
account="${1#*=}"
;;
--debug)
debug="true"
;;
"")
log_debug "Empty argument"
;;
*)
log_error "Invalid argument: ${1}"
exit 1
;;
esac
shift
done
답변1
Bourne과 같은 셸에서는 셸 옵션을 설정하는 것 외에도 set
위치 매개변수를 설정하는 데에도 사용할 수 있습니다.
set -- "${script_args[@]}"
--
필요:
$script_args
첫 번째 요소가 or로 시작하면 옵션으로 간주되지 않도록 옵션의 끝을 표시합니다 .-
+
- 이 문제를 해결하기 위해 인수가 에 전달되지 않으면
set
위치 인수를 빈 목록으로 설정하는 대신 변수(및 일부 셸의 함수) 목록을 인쇄합니다.
"${script_args[@]}"
, 어느~ 해야 하다참조되는 것은 "$@"
Bourne 쉘의 확장을 배열의 모든 요소로 확장하는 Korn 쉘 구문입니다. zsh
이며 bash
이 구문도 지원합니다 yash
.
이 모든 것에서 yash
당신은 또한 사용할 수 있습니다
set - "${script_args[@]}"
zsh에서는 다음을 사용할 수도 있습니다.
argv=( "$script_args[@]" )
에서는 yash
다음을 사용할 수도 있습니다.
set -- "$script_args"
등가물 rc
또는 파생물은 다음과 같습니다.
* = $script_args
존재하다 fish
:
set argv $script_args
in csh
/ tcsh
(1970년대 후반 배열을 지원하는 최초의 셸)
set argv = ($script_args:q)
¹ Bourne 쉘은 --
1981년 SysIII까지 이 기능을 지원하지 않았지만 항상 지원되었습니다 -
. 이는 실제로 옵션 구분자가 아니며 단지 옵션이 첫 번째 인수(예: for sh
)만 고려한다는 점일 뿐이며 이는 -
빈 옵션 목록입니다. .