bash compare a string vs a list of strings
bash, regex
Solution
Try the following code :
#!/bin/bash
bad_fruit=( apple banana kiwi )
re="$(printf '%s\n' "${bad_fruit[@]}" | paste -sd '|')"
for fname in *; do
# want to check if fname contains one of the bad_fruit
if [[ $fname =~ $re ]]; then
echo "$fname contains bad fruit in its name"
else
echo "$fname is ok"
fi
done
Take care of useless use of ls
`ls` is a tool for interactively looking at file information. Its output is formatted for humans and will cause bugs in scripts. Use globs or find instead. Understand why : http://mywiki.wooledge.org/ParsingLs
Problem
Suppose I have the following code in bash: ``` #!/bin/bash bad_fruit=( apple banana kiwi ) for fname in `ls` do # want to check if fname contains one of the bad_fruit is_bad_fruit=??? # <------- fix this line if [ is_bad_fruit ] then echo "$fname contains bad fruit in its name" else echo "$fname is ok" fi done ``` How do I fix is_bad_fruit so that it is true if fname contains one of the bad_fruit strings?