2013-02-17 23 views
5

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

#!/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 

ない希望する結果:

[email protected]:~/work$ ./test.sh 
0 
entered 0 
1 
entered 0 

事前にありがとうございます。 〜クリス・

答えて

7

することはできいずれかreturnあなたの関数の結果またはその出力キャプチャする$()を使用します。

...あなたが何をしたいのか
if [ $(foo $arg) -eq 0 ] ; then 
+0

大きな感謝! – user1117603

0

わからない

あなたfoo()機能常にリターンを成功するにはreturnを使用します。

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

2

0または1をエコーする機能が必要ですか?あなたのように見えるようになります

foo() { 
    if [ $1 = "zero" ]; then 
    return 0 
    else 
    echo 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 
関連する問題