2

bash では、関数を呼び出して返された戻り値を直接返すにはどうすればよいですか (申し訳ありませんが、これをより適切に表現する方法がわかりません)。例:

foo() {
  echo "$1"
  return 1
}

bar() {
  return foo 1
}

bar

これを行うと、return ステートメントの数値パラメーターが必要であると bash が文句を言います。

編集

実際の問題をよりよく表現するために、例を更新しました。いいえ、戻りコードを返したいだけでなく、最初に関数に値を渡したいと思っています...これが実際に実行可能かどうかはわかりません。

4

4 に答える 4

3

The only thing you can return from a shell script or a shell function is a numeric error code.

However, you can print some text to standard output in the function (or separate script, it's the same) using echo, cat, etc., and then capture the output, using bacticks syntax or $(...) syntax. Passing parameters to shell functions works the same way as passing parameters to scripts:

http://www.freeos.com/guides/lsst/advance01.html

于 2012-06-14T12:22:41.533 に答える
1

あなたの例のこれらの変更では、引数を に変更してfoo、一方の結果と他方の結果を簡単に区別できるようにします。

foo() {
  echo "$1"
  return 1
}

bar() {
  return "$(foo 2)"
}

bar
echo "$?"

上記は「2」を出力します。echoinはのfoo戻り値として使用されますbarreturn(およびexit) で扱える値の範囲は 0 ~ 255 です。

foo() {
  echo "$1"
  return 1
}

bar() {
  foo 2
  return "$?"
}

bar
echo "$?"

2 番目のバージョンは最初に 2 を出力します。これは、 の戻り値から伝播された戻り値であるfooため、1 が出力されるためです。barfoo

于 2012-06-15T02:06:00.413 に答える
1

This should work: you can only return a number in bash.

foo() {
  return 1
}

bar() {
  foo
  return 1
}

bar
于 2012-06-14T12:22:41.100 に答える
1

最後の呼び出し $? のリターン コードを返すだけです。

foo() {
  echo "$1"
  return 1
}

bar() {
  foo "bla"
  return $?
}

bar
于 2012-06-14T12:29:50.823 に答える