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'
正しい出力ストリームをキャプチャすると、関数によって出力されたものをキャプチャできます。したがって、何かを印刷して他の出力を保存する最も簡単な方法は、余分な出力を標準エラーにリダイレクトすることです。
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL"
echo "This function is done now" >&2
}
別の可能性は、たとえば次のようなものを使用して、ログメッセージを直接出力するのではなく、ファイルにログを記録することです。
log() {
printf '%s\n' "$@" > my.log
}
つまり、Bash関数は変数を返すことができません。実際の「戻り」値は、終了コードのみです。このため( その他多数 )、信頼できるロギング、戻り値、例外処理などが必要な場合は、Pythonなどの別の言語を使用する必要がありますRuby =またはJava。
標準エラーに情報メッセージを表示できます:
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL" # return this variable
echo "This function is done now" > /dev/stderr # goes to the screen
}
他のいくつかの提案が このLinux Journalの記事 にあります:グローバル変数を使用するか(優先しないと述べました)、または変数の名前を渡して結果を返します。