9

ステートメント内の関数に引数を渡してから、if関数が返すものを (bash で) 評価しようとしています。私が得ている結果は正しくありません。これをどのように適切に行うのですか?

#!/bin/bash

foo() {
    if [ $1 = "zero" ]; then
        echo "0"
    else 
        echo "1"
fi
}

arg="zero"
if foo $arg -eq 0 ; then
    echo "entered 0"
else
    echo "entered something else"
fi

arg="blah"
if foo $arg -eq 0 ; then
    echo "entered 0"
else
    echo "entered something else"
fi

望ましい結果ではない:

cknight@macbook:~/work$ ./test.sh
0
entered 0
1
entered 0
4

3 に答える 3

10

return関数の結果を取得するか、$()その出力をキャプチャするために使用できます。

if [ $(foo $arg) -eq 0 ] ; then
于 2013-02-17T09:48:15.050 に答える
3

関数が 0 または 1 をエコーする必要がありますか? あなたが何かを望んでいるように見えます

foo() {
  if [ $1 = "zero" ]; then
    return 0
  else 
    return 1
  fi
}

# Or even just simply foo () { [ $1 = "zero ]; }

arg="zero"
if foo $arg; then
    echo "entered 0"
else
    echo "entered something else"
fi

arg="blah"
if foo $arg; then
    echo "entered 0"
else
    echo "entered something else"
fi
于 2013-02-17T15:54:17.917 に答える
0

あなたが何をしたいのかわからない...

関数foo()は常に成功を返しますreturn

foo()関数に 2 番目と 3 番目のパラメーターを渡します-eq 0が、それらは使用されません。終了ステータスを確認しますか? それは単純if foo $arg; then ..; fiです。

于 2013-02-17T09:54:56.043 に答える