getoptsが最初の文字「-」のみを読み取るようにする方法

getoptsが最初の文字「-」のみを読み取るようにする方法

次のようにtestShell.sh使用されるシェルスクリプトがあります。getopts

#!/bin/bash
while getopts ":j:e:" option; do
    case "$option" in
        j) MYHOSTNAME=$OPTARG ;;
        e) SCRIPT_PATH=$OPTARG ;;
        *) ;;
    esac
done

echo "j=$MYHOSTNAME"
echo "e=$SCRIPT_PATH"
shift $((OPTIND - 1))
echo "remaining=$@"

私のテストが次のように実行されたとき:

$ testShell.sh  -jvalue1 -evalue4 -Djvalue3  -pvalue2

私が得た結果は次のとおりです。

j=value3
e=2
remaining=

しかし、私は出力が次のようになりたいと思います。

j=value1
e=value4
remaining=-Djvalue3 -pvalue2

保証は可能ですか? getopts 最初のキャラクターの投稿のみを見る - シンボル?-Djvalue3これは-jvalue3and-pvalue2として解釈されません-e2

ベストアンサー1

この試み:

$ ./testShell.sh  -j value1 -e value4 -D jvalue3  -p value2
j=value1
e=value4
remaining=jvalue3 -p value2

オプションとオプション文字列の間のスペースに注意してください。

help getopts説明する:

OPTSTRING contains the option letters to be recognized; if a letter
is followed by a colon, the option is expected to have an argument,
which should be separated from it by white space.

つまり、オプションとオプション文字列の間にスペースが必要です。

bash に組み込まれた getopt が実行できる機能以上の機能が必要な場合、/usr/bin/getopt ユーティリティーは、オプションとオプション文字列の間にスペースがある場合とない場合の長いオプションと短いオプションの両方をサポートします。オプションの文字列パラメータなどの追加機能もサポートされています。

ちなみに、 /usr/bin/getopt は、debianやubuntuなどの派生製品のutil-linuxパッケージで利用できます。他のディストリビューションや*nixesについてはわかりませんが、ソースが見つからない場合はダウンロードできます。 Debian アーカイブの他の場所で検索してください。

おすすめ記事