2017-03-07 5 views
0

次のコードスニペットの出力を理解できないようです。ループ内で関数の戻り値を印刷しようとループシェルスクリプトで関数の戻り値を取得する

contains() { 
local e 
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done 
return 1 
} 


line="ayush" 
line2="this is a line containing ayush" 
contains $line $line2 
echo $? #prints 0 
for i in 1 2 3;do 
    contains "$line" "$line2" 
    echo $? #prints 1 everytime 
done 

答えて

1

@Ayush Goelさんの問題はここにある

は、$ varとの "$ VAR" の間

contains() { 
    local e 
    for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done 
    return 1 
} 


line="ayush" 
line2="this is a line containing ayush" 

contains $line $line2 
echo $? #prints 0 

for i in 1 2 3;do 
    contains $line $line2 # <------------------ ignore "" 
    echo $? # Now it will print 0 
done 

違い:

1)$ varケース

ここでは

this is the line 

を出力しますは、$​​ VARが

var="this is the line" 
for i in "$var"; do 
    printf $i 
done 

スペース

2) "$ VAR" ケースを使用して展開され、これは

this 
を印刷することを意味します

ここに "$ var" wil 1つの引数としてみなされ、リストから1つの値しか取られません。

関連する問題