私はこれをシェルスクリプトのキーワード引数を取得するために使用します。
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
残りのパラメータを選択して使用できますが、"$*"
実際にはお勧めできません。標準的な期待は、オプションフラグが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
標準期待値を維持するには、残りのパラメータをジョブに追加する行を含めないでください。