Bashスクリプトでは、可能な限り関数にローカル変数を保持し、次のように関数から必要なものを渡そうとします。
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL"
しかし、関数に出力する独自のメッセージがある場合は、変数にキャプチャする必要がないように関数に独自のエコーを含めながらこれを実行できますか?
#!/bin/bash
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
echo "This function is done now" # do not return this variable
}
GLOBAL=$(FUNCTION)
echo "$GLOBAL" # should only echo 'value'
ベストアンサー1
正しい出力ストリームをキャプチャすると、関数が印刷するすべてのコンテンツをキャプチャできます。したがって、何かを印刷して他の出力を保存する最も簡単な方法は、追加の出力を標準エラーにリダイレクトすることです。
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL"
echo "This function is done now" >&2
}
もう1つの可能性は、次のようにログメッセージを直接印刷するのではなく、ファイルに書き込むことです。
log() {
printf '%s\n' "$@" > my.log
}
つまり、Bash機能変数を返すことはできません。。唯一の実際の「戻り値」は終了コードです。このため(そして多くの他)、安定したロギング、戻り値、例外処理などが必要な場合は、Python、Ruby、Javaなどの他の言語を使用する必要があります。