2017-10-27 10 views
0

配列を反復処理するbash関数を作成し、引数として渡された要素が配列に存在しない場合は0を返します。そうでない場合は1を返します。Bash:配列の反復と戻り値なし

ただし、次のコードではstdoutに何も印刷されません。

function checkparsed { 
    tocheck="$1" 
    shift 
    for item in [email protected] 
    do 
     if [ "$item" = "$tocheck" ]; then 
     return 0 
     fi 
    done 
    return 1 
} 

mdfiles=('foo') 
echo "$(checkparsed foo ${mdfiles[@]})" 

答えて

1

あなたがの出力をキャプチャしています機能はありません。

のいずれか、または01を印刷echoそれらを関数内で直接(returnすることを忘れないでください)、または関数を実行した後echo $?を使用します。 ${mdfiles[@]}の要素にスペースとグロブ文字を処理するために

、あなたは二重引用符を使用する必要があります。

for item in "[email protected]" 
# and 
checkparsed foo "${mdfiles[@]}" 
1

この行は問題です:

echo "$(checkparsed foo ${mdfiles[@]})" 

あなたの関数は何もエコーされていませんが、あなたが値0または1を戻ってきているからです。

あなたが実際にあなたの関数からの戻り値を$?をチェックする必要があります。

checkparsed foo ${mdfiles[@]} 
echo $? 

0 

またはelse条件評価で戻り値を使用します。

checkparsed foo ${mdfiles[@]} && echo "found" || echo "not found" 
found 

checkparsed food ${mdfiles[@]} && echo "found" || echo "not found" 
not found