私は自分の.bash_profileで定義した関数の中でgetopts
を使用したいと思います。 考え方は、この関数にいくつかのフラグを渡して、その動作を変更したいと考えています。私はこのようにそれを呼び出すとBash関数内のgetoptsの使用
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
:ここ
コードです
t -a bc
私はこの出力を得る:
-a bc
?
間違っているのですか?手動でシフトして解析することなく値bc
を取得したいと思います。関数内でgetopts
を正しく使用するにはどうすればよいですか?
EDITは:OK、私のシェルは、何らかの形で台無しにして、コードが細かいですが判明:無駄
EDIT#2に、OPTARG $をしようとする私のコードスニペットを修正しました。新しいウィンドウを開くとそれが解決されました。 argの値は実際$ OPTARGでした。
できれば私はこの答えを100倍upvoteします。これは私を夢中にさせていた!! –
1.) '1>&2'の' 1'は必要ありません。 2) 'a'、' o'、 'OPTARG'をローカルとして定義していませんでした。 3.) 'exit'はスクリプトを終了せず、サブシェルだけを終了します。スクリプトを終了するには、外側シェルで 'set -e'、サブシェルで' exit 1'を実行する必要があります。この例では問題は発生しませんが、 'MSG = $(foo ...)'がそれを行います。 – ceving
@ceving 1)これはコーディングスタイルの問題ですが、いいえ、言語定義ごとに必要ではありません。 2)合意した、それらはローカルでなければなりません。 3)あなたが言ったように、私の例ではexit *がスクリプトを終了します。もちろん、 'exit'はサブシェルを終了しませんが、これはこの問題の特定の問題ではありません。あなたは 'set -e'を使う必要はないので、エラーを捕まえるだけでよく、' MSG = $(foo ...)|| 「死ぬ」も同様に機能する。 'set -e'はこの問題に対する一つの解決策ですが、他の多くの人たちと同じように使用することはお勧めしません(http://mywiki.wooledge.org/BashFAQ/105)。 –