4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashで関数内から関数を呼び出したときの呼び出し元関数の戻り値の罠

Last updated at Posted at 2017-08-09

bashで関数の戻り値を標準出力で返すということは普通に行うことと思います。
その時に関数の戻り値が予期せぬ値になるケースがありました。
調べたところ、関数内で呼んでいる関数がechoを呼んでいる場合に
戻り値がその出力を含む挙動になっていました。

以下が問題のshellです。

#!/bin/bash
funcA() {
    echo "a"
}

funcB() {
    funcA
    echo "b"
}

b_result=$(funcB)
echo $b_result

上記を実行した場合の期待する出力は"b"ですが実際に実行すると以下のようになります。

a b

funcAの出力がfuncBの標準出力に含まれてしまいます。
上記を回避するためにはfuncAの呼び出し部分で戻り値を受けるように変更します。

#!/bin/bash
funcA() {
    echo "a"
}

funcB() {
    local temp=$(funcA) #←戻り値を受けるようにする。
    echo "b"
}

b_result=$(funcB)
echo $b_result

これで期待した"b"という戻り値を取得することができます。

4
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?