如何将shell通配符传递给反引号命令

我试图在shell脚本中使用find来计算我匹配通配符模式的文件数,然后获取文件的名称(如果只有一个)。但我无法将通配符模式传递给反引号扩展。
FINDCMD="find . -iname *DATA*.txt"
DATACOUNT=$($FINDCMD | wc -l)

if [ $DATACOUNT -eq 1 ]
then
  use-data $($FINDCMD)
else
  echo bugger
fi
这不起作用:shell在调用find时扩展DATA.txt。我希望通过星号来寻找。 如果我做到了
FINDCMD="find . -iname '*DATA*.txt'"
然后shell不会扩展星号,但是find会获得单引号并且不会匹配任何内容。     
已邀请:
不要将命令放在变量中。直接执行命令有什么问题?
DATACOUNT=$(find . -iname "*DATA*.txt" | wc -l)
if [ $DATACOUNT -eq 1 ];then
    .....
fi
编辑: 如果您想重复使用该命令,请使用子程序
myfind(){
    find . -iname "*DATA*.txt" | wc -l
}
    
请做以下几点: 在find命令中使用引号:
FINDCMD="find . -iname "*DATA*.txt""
OR
FINDCMD='find . -iname "*DATA*.txt"'
使用以下bash选项:
-f      Disable pathname expansion.
如下
set -f
在脚本的开头 这应该够了吧。虽然没有在你的脚本上测试过,但你应该从这一点开始。     
切换单引号和双引号。 尝试:
FINDCMD='find . -iname "*DATA*.txt"'
    

要回复问题请先登录注册