开发者

bash scripting: How to test list membership

(This is debian squeeze amd64)

I need to test if a file is a member of a list of files. So long my (test) script is:

set -x
array=$( ls )
echo $array
FILE=log.out
# This line gives error!
if $FILE in $array
then   echo "success!"
else  echo "bad!"
fi
exit 0

¿Any ideas?

Thanks for all the responses. To clarify: The script given is only an example, the actual problem is more complex. In the final solution, it will be done within a loop, so I need the file(name) to be tested for to be in a variable开发者_开发技巧.

Thanks again. No my test-script works, and reads:

in_list() { local search="$1" shift local list=("$@") for file in "${list[@]}" ; do [[ "$file" == "$search" ]] && return 0 done return 1 } # # set -x array=( * ) # Array of files in current dir # echo $array FILE="log.out" if in_list "$FILE" "${array[@]}" then echo "success!" else echo "bad!" fi exit 0


if ls | grep -q -x t1 ; then
  echo Success
else
  echo Failure                                                                                
fi

grep -x matches full lines only, so ls | grep -x only returns something if the file exists.


If you just want to check if a file exists, then

[[ -f "$file" ]] && echo yes || echo no

If your array contains a list of files generated by some means other than ls, then you have to iterate over it as demonstrated by Sorpigal.


How about

in_list() {
    local search="$1"
    shift
    local list=("$@")
    for file in "${list[@]}" ; do
        [[ $file == $search ]] && return 0
    done
    return 1
}

if in_list log.out * ; then
    echo 'success!'
else
    echo 'bad!'
fi

EDIT: made it a bit less idiotic.

EDIT #2: Of course if all you're doing is looking in the current directory to see if a particular file is there, which is effectively what the above is doing, then you can just say

[ -e log.out ] && echo 'success!' || echo 'bad!'

If you're actually doing something more complicated involving lists of files then this might not be sufficient.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜