Bashスクリプトは関数内でローカルにエコーされます。

Bashスクリプトは関数内でローカルにエコーされます。

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などの他の言語を使用する必要があります。

おすすめ記事