Shift:グローバルバージョンはありますか?

Shift:グローバルバージョンはありますか?

パラメータリストを解析するための一般的なトップダウン解析方法を実装しようとしました。

eat()私の機能が機能しない理由を知りたいです。これは、位置パラメータ$ 1、$ 2、$ 3、...が特定の機能のコンテキストにあるためです。実際のスクリプトの内容ではありません。本当に悪いです。私はまだバッシュに慣れていません。

だから私の質問は、もしそうであれば、交代勤務の範囲はまたeat()私の機能の文脈でもあるということです、そうでしょ?

他の関数内でスクリプトパラメータを送信する方法は本当にありませんか? :(

[これは、Caseステートメントですべてのロジックを実装する必要があることを意味します(通常はトップダウンパーサーの後)! (!?)]

ベストアンサー1

関数は渡された引数の全体(またはサブセット)を返すことができます(たとえば、グローバル配列を介して)、呼び出しスクリプトはそれを使用して独自の引数を設定できます。例えば

#!/bin/bash

declare -a args

nofoo() {
  # we don't like "--foo", it is forbidden!
  for a in "$@"; do
    [ "$a" != "--foo" ] && args+=("$a")
  done
}

nofoo "$@"
set -- "${args[@]}"

help setバッシュから:

置く:set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

シェルオプションと位置パラメータの値を設定または設定解除します。

シェル属性と位置パラメータの値を変更するか、シェル変数の名前と値を表示します。

[...]

-- 残りの引数を位置引数に代入します。残りのパラメータがない場合、位置パラメータは設定解除されます。

おすすめ記事