【发布时间】:2017-11-26 16:12:00
【问题描述】:
尝试遍历目录中的所有文件,检查它们是否存在字符串,如果不存在则添加它。这就是我所拥有的:
#!/bin/bash
FILES=*
for f in $FILES
do
echo "Processing $f file..."
if grep -Fxq '<?xml version="1.0" encoding="UTF-8"?>' $f
then
continue
else
echo '<?xml version="1.0" encoding="UTF-8"?>' | cat - $f > temp && mv temp $f
fi
done
...但脚本在第一个循环后停止。任何想法为什么?
【问题讨论】:
-
这取决于你在哪个目录启动脚本?有文件吗?更多?
-
不要使用
FILES;它受参数扩展和分词的影响,如果任何文件名包含空格,则会导致问题。只需使用for f in *。 -
字符串应该添加到哪里?您的问题有点简洁,因为它没有正确解释要求
-
bash -x yourscript -
1) 直接在
for循环中使用 glob。 2) 学习在 Bash 扩展周围使用"quotes",否则你会很痛苦。因此,无论您在哪里拥有$f,您都可以使用"$f",否则任何名称中带有空格的文件在 Bash 中看起来就像两个文件。