2

別の bash 関数内から 1 つの bash 関数を呼び出そうとしていますが、期待どおりに動作しません。

#/bin/bash
function func1(){
    echo "func1 : arg = ${1}"
    return 1
}
function func2(){
    echo "func2 : arg = ${1}"
    local var=func1 "${1}"
    echo "func2 : value = $var"
}
func2 "xyz"

現在の出力は次のとおりです。

Current output :
func2 : arg = xyz
func2 : value = func1

質問: 上記のプログラムを修正して、次の出力が得られるようにするにはどうすればよいですか? :

Desired output : 
func2 : arg = xyz
func1 : arg = xyz
func2 : value = 1
4

2 に答える 2

5

Bash の関数は、他の多くの言語の関数と同じようには機能しません。0 から 255 までの整数のみを返すことができます。これは$?、関数呼び出しの後に を使用して取得されます。文字列など、他の値を取得する場合は、サブシェルで呼び出します。

local var=$(func1 "${1}")

は、関数から stdout (echo文から) を に取得し$varます。

ちなみに、関数の構文は次のとおりです。

function func1 { ... }

また

func1() { ... }
于 2012-11-05T13:48:22.363 に答える
2

func2定義を次のように変更します。

function func2 () {
    echo "func2 : arg = ${1}"
    func1 "${1}"
    local var=$?
    echo "func2 : value = $var"
}
于 2012-11-05T13:33:53.243 に答える