2017-03-07 72 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我认为是一个参数,它只会从列表中取一个值。