我在目录中有一堆输出文件,例如:a.out,b.out c.out等。
我想搜索输出文件,如果输出文件名包含某个字符串(例如“a”),那么它会将相应的输出文件“a.out”打印到屏幕。
在我进入输出文件目录后,这是我的代码:
OUT_FILE="*.out"
OT=$OUT_FILE
STRING="a"
For file in "$OT";do
if [[$file == *"$STRING"*]];then
echo $file
fi
done
我收到的错误是[[* .out:命令未找到。看起来$ file被解释为$ OT,而不是与$ OT匹配的单个文件。
但是当我删除了if语句并且只是做了一个for循环来回显每个$文件时,输出给了我所有以.out结尾的文件。
愿意帮助理解我做错了什么。提前谢谢。
答案 0 :(得分:2)
[[
之后和]]
之前需要空格:
for file in *.out;do
if [[ "$file" == *"$STRING"* ]];then
printf '%s\n' "$file"
fi
done
或只是
for file in *"$STRING"*.out; do
printf '%s\n' "$file"
done
或
printf '%s\n' *"$STRING"*.out
答案 1 :(得分:2)
没有像[[
这样的bashisms(可以在任何Bourne-heritage shell中运行)并且速度非常快,因为它不会分叉任何实用程序:
for file in *.out; do
case $file in
(*a*) printf '%s\n' "$file";;
esac
done
如果您愿意,可以将(*a*)
替换为(*$STRING*)
。
如果您有find
了解-maxdepth 1
:
find . -maxdepth 1 -name \*"$STRING"\*.out
PS:你的问题有点不清楚。您发布的代码在文件名中对a
进行了测试(我的代码也是如此)。但是,您的文字建议您要在文件内容中搜索a
。这是什么?你能说清楚吗?