関数の結果を保持するグローバル変数の名前に関する規則はありますか?

関数の結果を保持するグローバル変数の名前に関する規則はありますか?

シェル関数が結果を「返す」一般的な方法は、それをグローバル変数に割り当てることです。

この変数名のルール/ベストプラクティスはありますか?

ベストアンサー1

REPLY通常、この目的に使用されます。これはread少なくともselect使用されますbashkshzsh

zshドキュメントから:

返信する
このパラメーターは、関数呼び出しやリダイレクトが不可能な場合、または不要な場合にシェルスクリプトとシェル組み込みの間に文字列値を渡すための規則に従って予約されています。組み込みコマンド read と複合コマンド select は REPLY を設定でき、ファイル名の生成は特定の式を評価する際にその値を設定して確認します。一部のモジュールは同様の目的でREPLYを使用します。

返信する
REPLYと同じですが、文字列の代わりに配列値に使用されます。

ただし、この変数の種類を変更するときの潜在的な影響を知っておく必要があります。

別の方法は、変数名をパラメータとして渡すことです。

get_date() {
  local date
  date=$(date)
  eval "$1=\$date"
}

get_dateという変数を使って呼び出すと効果はありませんdateksh93この問題は、呼び出し元のスコープで変数を参照する方法であるnamerefを導入することによって解決されました。bashNamerefのサポートが最近追加されましたが、同じ範囲の変数を(名前だけで)参照するので、役に立ちません。

function get_date {
  typeset -n var=$1
  var=$(date)
}

ではksh93呼び出しても有効ですget_date var。する方法があります働くbashそして、バグを悪用しますが、後でバグが修正される可能性があるので、そこまでは行きません。mkshyashunset

別のアプローチは、位置パラメータを$1除くすべての変数を設定するために関数でローカル変数を使用しないことです。$2ただし、これによりコードが読み取れなくなる可能性があります。たとえば、参照してください。getopts_longシェル機能の実装

おすすめ記事