Subject: grep -vf <(<nothing>) filters all rows

From: [email-masked]
Date: Fri, 4 Jan 2019 00:04:28 -0500

I have to pre-check for an empty set before passing it to grep:
 
SAVED_RECORDs=($(sqlite3 -list -separator '/' files.db "SELECT FileName FROM Files WHERE ModTime > '2018-12-31'")) #Returns an empty set
NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]}
| tr ' ' '\n') #Returns an empty list because grep considers SAVED_RECORDs to be universal rather than null set
Workaround:

if [ ${#SAVED_RECORDs[@]} -gt 0 ]; then

  NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Now returns the expected subtraction of SAVED_RECORDs from NEW_RECs

fi