O problema é como o shell quebra a linha em tokens. Ele expande $start
para -newerct "22 Mar 2016 10:00"
, e então divide palavras em espaços. Assim, find
recebe os seguintes argumentos: -newerct
, "22
, Mar
, etc., portanto, a mensagem de erro. man bash
states:
The order of expansions is: brace expansion, tilde expansion, parameter, variable and arithmetic expansion and command substitution (done in a left-to-right fashion), word splitting, and pathname expansion.
Não tenho certeza se isso pode ser feito da maneira que você queria. Seu segundo script é mais legível, mas você precisa garantir que as variáveis não sejam nulas. Talvez você possa fazer assim:
find /usr/local ${start:+-newerct} "$start" ${end:+! -newerct} "$end" -type f ;