防止bash脚本中的通配符扩展

防止bash脚本中的通配符扩展,bash,Bash,我在这里搜索过了,但仍然找不到我的环球问题的答案 我们有从“file.1”到“file.5”的文件,如果通宵处理正常,每个文件都应该包含字符串“completed” 我认为首先检查是否有一些文件是一件好事,然后我想对它们进行grep,看看是否找到5个“已完成”的字符串。以下无害方法不起作用: FILES="/mydir/file.*" if [ -f "$FILES" ]; then COUNT=`grep completed $FILES` if [ $COUNT -eq 5

我在这里搜索过了,但仍然找不到我的环球问题的答案

我们有从“file.1”到“file.5”的文件,如果通宵处理正常,每个文件都应该包含字符串“completed”

我认为首先检查是否有一些文件是一件好事,然后我想对它们进行grep,看看是否找到5个“已完成”的字符串。以下无害方法不起作用:

FILES="/mydir/file.*"
if [ -f "$FILES" ]; then
    COUNT=`grep completed $FILES`
    if [ $COUNT -eq 5 ]; then
        echo "found 5"
else
    echo "no files?"
fi
感谢您的建议…Lyle

Per,计算文件的最佳方法是使用数组(设置了
nullglob
选项):

如果要收集这些文件的名称,可以这样做(假设GNU grep):

completed_文件=()
而IFS=''read-r-d''文件名;做
已完成的_文件+=(“$filename”)

完成<您可以执行以下操作以防止跳转:

echo \'$FILES\'
但你似乎有不同的问题

试试这个:

[[ $(grep -l 'completed' /mydir/file.* | grep -c .) == 5 ]] || echo "Something is wrong"
如果没有找到5行已完成的代码,将打印“有问题”

更正了解释中缺少的“-l”

$ grep -c completed file.*
file.1:1
file.2:1
file.3:0

$ grep -l completed file.* 
file.1
file.2

$ grep -l completed file.* | grep -c .
2

$ grep -l completed file.* | wc -l
   2

你是说
COUNT=`grep completed'$FILES'| wc-l`
看起来真正的问题是如何计算文件,而不是如何防止通配符扩展。对的你会反对改变主题(或让其他人改变主题)吗?
grep | grep-c
,而不是单一的
grep-c
[[ $(grep -l 'completed' /mydir/file.* | grep -c .) == 5 ]] || echo "Something is wrong"
$ grep -c completed file.*
file.1:1
file.2:1
file.3:0

$ grep -l completed file.* 
file.1
file.2

$ grep -l completed file.* | grep -c .
2

$ grep -l completed file.* | wc -l
   2