シェルコマンドについて説明します。 Shift $(($optind - 1))

シェルコマンドについて説明します。 Shift $(($optind - 1))

私はLinux愛好家ではありませんが、プロジェクトのために読む必要があるいくつかのスクリプトが詰まっています。それでは、このコマンドが何をするのに役立つ人がいますか?

shift $(($optind - 1))

ベストアンサー1

shift $((OPTIND-1))OPTIND大文字の使用に注意してください)は通常、ループのgetopts while直後に表示されます。$OPTIND見つかったオプションの数getopts

pauljohn32がコメントで述べたように、厳密にOPTIND言えばNextコマンドラインパラメータ。

GNUからバッシュリファレンスマニュアル:

getopts optstring 名前[args]

getoptsシェルスクリプトで位置引数を解析するために使用されます。 optstring認識するオプション文字が含まれています。文字の後にコロンが続く場合、オプションには引数が必要で、スペースで区切る必要があります。コロン(':')と疑問符('?')はオプション文字として使用できません。呼び出すたびに、次のgetoptsオプションがシェル変数名に入り、name存在しない場合は初期化され、処理する次の引数のインデックスが変数に入りますOPTINDOPTINDシェルまたはシェルスクリプトが呼び出されるたびに1に初期化されます。オプションに引数が必要な場合、getoptsは引数を変数に入れますOPTARG。シェルはOPTIND 自動的にリセットされません。getopts新しいパラメータセットを使用するには、同じシェル呼び出し間で手動でリセットする必要があります。

オプションの終わりに達すると終了し、getopts0より大きい値を返します。OPTIND名前が「?」に設定された最初の非オプションパラメータのインデックスに設定されます。

getoptsargs位置引数は通常解析されますが、より多くの引数が指定された場合はその引数が解析されgetoptsます。

shift N
削除N位置引数リストの文字列です。したがって、解決されたすべてのオプションは引数リストから削除されるため、shift $((OPTIND-1))後でスクリプトのオプションではなく最初の引数に参照が渡されます。getopts$1

修正する

コメントでmikeservが述べたように、shift $((OPTIND-1))おそらく安全ではないでしょう。不要な単語分割などを防ぐためにみんなパラメータ拡張は二重引用符で囲む必要があります。したがって、このコマンドの安全な形式は次のとおりです。

shift "$((OPTIND-1))"

おすすめ記事