여러 값을 가진 Bash 키워드 인수

여러 값을 가진 Bash 키워드 인수

나는 이것을 쉘 스크립트에 대한 키워드 인수를 얻기 위해 사용합니다.

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

표준 기대치를 유지하려면 나머지 매개변수를 작업에 추가하는 줄을 포함하지 마세요.

관련 정보