2017-03-07 1 views
0

Kann nicht die Ausgabe des folgenden Codeausschnitts zu verstehen scheinen. versuchen, die Funktion Rückgabewert in einer Schleife hierRückgabewert der Funktion in einer Schleife erhalten - Shell-Skript

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 

Antwort

1

@Ayush Goel

Das Problem zu drucken ist,

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 

Unterschied zwischen $ var und "$ var":

1) $ var fall

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

hier wird es drucken

this is the line 

bedeutet $ var Raum mit expandiert wird

2) "$ var" Fall

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

wird dieser Druck

this 

hier "$ var" wil Ich werde als ein einzelnes Argument betrachtet und es wird nur ein Wert von der Liste genommen.

Verwandte Themen