for循环不会在sh中提供预期的输出,但是如果将sh“”“#!/ bin / bash + x添加到脚本块中,则可以正常工作

at
for newfile in `find . -type f ! -path "./data/*" ! -name new_changes.txt`; do 
     if ! grep -q "\$newfile" new_changes.txt; then 
       rm \$newfile;
     fi
done

如果sh """#!/bin/bash +x在代码块的开头给出以上代码,则上述代码可以正常工作但是当它被注释掉时-抛出以下错误

rm:无法删除“ $ newfile”:没有这样的文件或目录

关于如何修改此for循环而无需工作的任何建议sh """#!/bin/bash +x

用户名

@alaniwi已经在他的评论中解释了您rm命令中的错误您正在尝试删除名称为的文件$newfile,并且可能没有任何以美元符号开头的文件。

另一个问题类似,但不完全相同:您的grep命令搜索文字字符串$newfile,而您可能希望搜索存储在变量newfile中的字符串因此,您必须删除\

但这仍然意味着变量newfile的内容可以作为正则表达式进行解释。例如,如果newfile具有值abc.txtgrepnew_changes.txt仅包含也将成功abcdtxt为避免此错误,应使用-Fgrep选项,以避免将其解释为正则表达式。

而且,还有一个错误:Saynewfile具有value abc,并且new_changes.txt包含just xxxabc,但是它们仍然匹配,因为abc是的子字符串xxxabc为避免此错误,应使用-xgrep选项,选项将强制匹配整行。

因此,您的命令应为 grep -qFx "$newfile" new_changes.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档