7

現在、1 つの bash 関数呼び出しを別の関数呼び出し内にネストしようとしています (これにより、1 つの関数の出力が別の関数の入力として使用されます)。ここでやろうとしているように、bash で関数呼び出しをネストすることは可能ですか?

まず、次の 2 つの関数を定義しました。

returnSomething()
{
    return 5;
}

funky ()
{
  echo $1;
}

次に、ある関数の出力を別の関数の入力として使用しようとしました。ただし、次のステートメントは の出力を出力しませんreturnSomething。代わりに、何も出力しません。

funky $returnSomething; #Now I'm trying to use the output of returnSomething as the input for funky.
4

3 に答える 3

10

2 つの問題があります。1 つは、関数return出力ではなく、その終了ステータス(成功の場合はゼロ、失敗の場合はゼロ以外) を設定するものです。たとえば、 (改行echo fooを加えて)出力 fooしますが、終了ステータス0です。出力を制御するには、echoまたはを使用しprintfます。

function returnSomething ()     # should actually be outputSomething
{
    echo 5
}

もう 1 つの問題は、$returnSomething(または${returnSomething}) が という名前の変数の値を与えることですreturnSomething

x=5          # sets the variable x
echo "$x"    # outputs 5

コマンドの出力をキャプチャするには、表記を使用します$(...)(または`...`、後者の方がややこしいです)。そう:

function funky ()
{
    echo "$( "$1" )"
}
funky returnSomething    # prints 5

あるいは単に:

function funky ()
{
    "$1"          # runs argument as a command
}
funky returnSomething    # prints 5

対照的に、コマンドの終了ステータスを取得したい場合は、特別なシェル パラメータを使用します?(コマンドの完了時にコマンドの終了ステータスに設定されます)。

function returnSomething ()
{
    return 5
}
function funky ()
{
    "$1"          # runs argument as a command
    echo "$?"     # prints its exit status
}
funky returnSomething    # prints 5
于 2013-05-01T20:16:05.360 に答える
3

Bash は の出力に置き換える$(command)ので、 の出力を渡すcommandために使用できます。ただし、 bash について誤解しているようです。戻り値は、呼び出しが成功したかどうかを示す数値です。bash で最後のプロセスの戻りステータスを取得する方法は次のとおりです。funky $(returnSomething)funkyreturnSomethingreturn$?

returnSomething
funky $?
于 2013-05-01T20:14:49.980 に答える
0

これはどう:

function foo() { echo one two three; }
function bar() { echo foo #1: $1 }
bar $( foo ) # ==> foo #1: one

上記には問題があります。指摘してくれたアンダーソンに感謝します。ここに更新があります:

function foo() { echo one two three; }
function bar() { echo foo $1; }
bar $( foo )
于 2013-05-01T20:13:21.007 に答える