O primeiro não funcionará como se $null_terminated
estivesse vazio ou não definido, find
reclamará desse argumento extra vazio.
find -mindepth 1 -maxdepth 1 ! \( "${args[@]}" \) $null_terminated
Funcionaria, mas apenas se $null_terminated
não contiver caracteres curinga ou caracteres do IFS.
Fazendo isso:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! \( "${args[@]}" \) "${extra_args[@]}"
não teria o problema.
Bourne / POSIXly, você poderia fazer:
set -- find . ! -name . -prune ! \( "$@" \)
[ -p /dev/stdin ] && set -- "$@" -exec printf '%sunset extra_arg; [ -p /dev/stdin ] && extra_arg=-print0
find . ! -name . -prune ! \( "$@" \) ${extra_arg+"$extra_arg"}
' {} +
"$@"
Para um argumento:
find -mindepth 1 -maxdepth 1 ! \( "${args[@]}" \) $null_terminated
(note que -print0
não é POSIX).