私はLinux愛好家ではありませんが、プロジェクトのために読む必要があるいくつかのスクリプトが詰まっています。それでは、このコマンドが何をするのに役立つ人がいますか?
shift $(($optind - 1))
答え1
shift $((OPTIND-1))
(OPTIND
大文字の使用に注意してください)は通常、ループのgetopts
while
直後に表示されます。$OPTIND
見つかったオプションの数getopts
。
pauljohn32がコメントで述べたように、厳密にOPTIND
言えばNextコマンドラインパラメータ。
GNUからバッシュリファレンスマニュアル:
getopts optstring 名前[args]
getopts
シェルスクリプトで位置引数を解析するために使用されます。optstring
認識するオプション文字が含まれています。文字の後にコロンが続く場合、オプションには引数が必要で、スペースで区切る必要があります。コロン(':')と疑問符('?')はオプション文字として使用できません。呼び出すたびに、次のgetopts
オプションがシェル変数名に入り、name
存在しない場合は初期化され、処理する次の引数のインデックスが変数に入りますOPTIND
。OPTIND
シェルまたはシェルスクリプトが呼び出されるたびに1に初期化されます。オプションに引数が必要な場合、getoptsは引数を変数に入れますOPTARG
。シェルはOPTIND
自動的にリセットされません。getopts
新しいパラメータセットを使用するには、同じシェル呼び出し間で手動でリセットする必要があります。オプションの終わりに達すると終了し、
getopts
0より大きい値を返します。OPTIND
名前が「?」に設定された最初の非オプションパラメータのインデックスに設定されます。
getopts
args
位置引数は通常解析されますが、より多くの引数が指定された場合はその引数が解析されgetopts
ます。
shift
N
削除N位置引数リストの文字列です。したがって、解決されたすべてのオプションは引数リストから削除されるため、shift $((OPTIND-1))
後でスクリプトのオプションではなく最初の引数に参照が渡されます。getopts
$1
修正する
コメントでmikeservが述べたように、shift $((OPTIND-1))
おそらく安全ではないでしょう。不要な単語分割などを防ぐためにみんなパラメータ拡張は二重引用符で囲む必要があります。したがって、このコマンドの安全な形式は次のとおりです。
shift "$((OPTIND-1))"
答え2
$((...))
ただ計算するだけです。あなたの例では、値を取り、$optint
1を減算します。
shift
位置パラメータを削除します。あなたの場合、optint-1
パラメータは削除されます。
help getopts
help shift
詳細については「算術拡張」をチェックして、man bash
特にGoogleで検索してください。getopts
。