dファイルからsource
変数に保存した特定のコマンドの終了ステータスを返したいと思いますreturn_val
。
名前空間を汚染しないように、この変数をオフにしてその値を返すにはどうすればよいですか?
答え1
ローカル変数(ksh、bash、zshなど)をサポートするシェルを使用している場合は、すべてのコードを関数に入れ、すべての変数をローカル変数として宣言してください。
通常のshでは、eval
値を使用する前に変数拡張を実行できます。返品ステータスには数字のみが含まれるため、要求の厳しい参照も必要ありません。
eval "unset return_status; return $return_status"
答え2
変数の内容のコピーを保持するためにSTDOUTを使用します。
# Unset a variable and then use its value afterwards
echo $_return_val | { unset _return_val; return "$(cat)"; }
答え3
ローカル変数で関数を使用できます
return_exit () {
local code=${!1}
unset "$1"
return "$code"
}
次に、次のように呼び出します。
return_exit _return_val
答え4
解決策に対するあなたの欲望とアイデアが標準の不特定部分と衝突するので、中間変数を使用して値を保存することをお勧めします。
もちろん、これは複数の変数にメソッドを適用したい場合にのみ意味があります。$REPLY
シェルに統合されたさまざまな変数を使用できます。
{ cmd; }
サブシェルを作成しない権限がないため、unset
これらの設定を呼び出してもメインシェルでは機能しない可能性があります。
使用
echo "$_return_val" && unset _return_val
私が考えるすべての場合にあなたの好みに合う必要があります。