防止bash脚本中的通配符扩展
我在这里搜索过了,但仍然找不到我的环球问题的答案 我们有从“file.1”到“file.5”的文件,如果通宵处理正常,每个文件都应该包含字符串“completed” 我认为首先检查是否有一些文件是一件好事,然后我想对它们进行grep,看看是否找到5个“已完成”的字符串。以下无害方法不起作用:防止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
FILES="/mydir/file.*"
if [ -f "$FILES" ]; then
COUNT=`grep completed $FILES`
if [ $COUNT -eq 5 ]; then
echo "found 5"
else
echo "no files?"
fi
感谢您的建议…LylePer,计算文件的最佳方法是使用数组(设置了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