나는 이것을 쉘 스크립트에 대한 키워드 인수를 얻기 위해 사용합니다.
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-u)
USERID="$2"
shift # past argument
shift # past value
;;
-n)
JOBNAME="$2"
shift # past argument
shift # past value
;;
-j)
job="$2"
shift # past argument
shift # past value
;;
*) echo "Improper usage"; exit 1;;
esac
done
이제 job
변수는 일반적으로 여러 단어로 구성됩니다. 참조에 매개변수의 전체 값을 제공하면 제대로 작동합니다. 하지만 따옴표 없이 값을 제공하면서도 해당 단일 변수에 저장하는 것이 가능합니까? 예를 들어, 이것은 작동합니다
./myscript -j "my long string"
그리고 그것을 "my long string"
변수에 저장합니다 job
. 하지만 나는 그것이 매우 유사하게 작동하기를 원합니다.
./myscript -j my long string
답변1
나머지 매개변수를 선택하여 사용할 수 있지만 "$*"
실제로는 권장하지 않습니다. 표준 기대치는 옵션 플래그가 하나의 인수 값을 초과해서는 안 된다는 것입니다.
#!/bin/bash
#
progname="${0##*/}"
usage="Usage: $progname -u <userid> -n <jobname> -j <job>"
while getopts ':u:n:j:' OPT
do
case "$OPT" in
u) userid="$OPTARG" ;;
n) jobname="$OPTARG" ;;
j) job="$OPTARG" ;;
?) echo "$usage" >&2; exit 1 ;;
esac
done
shift $(($OPTIND - 1))
# Append any remaining arguments to the job
[[ $# -gt 0 ]] && job="${job:+$job }$*"
printf "userid=%s, jobname=%s, job=%s.\n" "$userid" "$jobname" "$job"
exit 0
표준 기대치를 유지하려면 나머지 매개변수를 작업에 추가하는 줄을 포함하지 마세요.