2017-03-07 99 views
0

似乎無法理解以下代碼片段的輸出。試圖在循環中打印函數的返回值在循環shell腳本中獲取函數的返回值

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戈埃爾

的問題是在這裏,

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 

$ var和 「$ VAR」 之間的區別:

1)$ var case

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

這將打印

this is the line 

意味着$ var的使用空間

2) 「$ VAR」 案

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

擴大,這將打印

this 

在這裏「$ var」wil我認爲是一個參數,它只會從列表中取一個值。