为什么 find 命令在 if return "paths must precede expression" 错误?

Why does find command in if return "paths must precede expression" error?

下面是我的 ksh 脚本。第一个 if 测试条件出现 paths must precede expression 错误。为了检查 if..find 的语法是否正确,我添加了第二部分并且正确地收到消息 pass 2 - found files.

我还验证了下面的查找命令运行成功并且 returns 我得到了我想要的正确文件。我尝试在 PAY*.txt 周围加上双引号,并在星号 'PAY*.txt' 前加上反斜杠,但没有成功。

find -iname 'PAY*.txt' -newermt '2021/04/22 00:00' ! -newermt '2021/04/22 23:59' -print

我猜测问题可能出在 p_date1 和 p_date2 被通过,但我又一次了解不够,无法解决它。任何帮助将不胜感激。

#!/bin/ksh

p_date1='2021/04/22 00:00'
p_date2='2021/04/22 23:59'

if test -n "$(find -iname 'PAY*.txt' -newermt $p_date1 ! -newermt $p_date2 -print)";
then
  echo 'Files exist to upload'
else
  echo 'No Payment files exist to upload'
fi

if test -n "$(find -iname 'PAY*.txt' -ls)";
then
  echo 'pass 2 - found files'
else
  echo 'pass 2 - no files'
fi

谢谢。

问题是日期变量 - 如果您正确阅读了 find 的输出,您也会注意到这一点。

if test -n "$(find . -iname 'PAY*.txt' -newermt "$p_date1" ! -newermt "$p_date2" -print)";

注意变量名两边的双引号。