シェル関数が結果を「返す」一般的な方法は、それをグローバル変数に割り当てることです。
この変数名のルール/ベストプラクティスはありますか?
ベストアンサー1
REPLY
通常、この目的に使用されます。これはread
少なくともselect
使用されますbash
。ksh
zsh
zsh
ドキュメントから:
返信する
このパラメーターは、関数呼び出しやリダイレクトが不可能な場合、または不要な場合にシェルスクリプトとシェル組み込みの間に文字列値を渡すための規則に従って予約されています。組み込みコマンド read と複合コマンド select は REPLY を設定でき、ファイル名の生成は特定の式を評価する際にその値を設定して確認します。一部のモジュールは同様の目的でREPLYを使用します。返信する
REPLYと同じですが、文字列の代わりに配列値に使用されます。
ただし、この変数の種類を変更するときの潜在的な影響を知っておく必要があります。
別の方法は、変数名をパラメータとして渡すことです。
get_date() {
local date
date=$(date)
eval "$1=\$date"
}
get_date
という変数を使って呼び出すと効果はありませんdate
。ksh93
この問題は、呼び出し元のスコープで変数を参照する方法であるnamerefを導入することによって解決されました。bash
Namerefのサポートが最近追加されましたが、同じ範囲の変数を(名前だけで)参照するので、役に立ちません。
function get_date {
typeset -n var=$1
var=$(date)
}
ではksh93
呼び出しても有効ですget_date var
。する方法があります働くbash
そして、バグを悪用しますが、後でバグが修正される可能性があるので、そこまでは行きません。mksh
yash
unset
別のアプローチは、位置パラメータを$1
除くすべての変数を設定するために関数でローカル変数を使用しないことです。$2
ただし、これによりコードが読み取れなくなる可能性があります。たとえば、参照してください。getopts_long
シェル機能の実装。