我在一个目录中有一堆输出文件,例如:a.out、b.out c.out 等。
我想搜索输出文件,如果输出文件名包含某个字符串(例如“a”),那么它会将相应的输出文件“a.out”打印到屏幕上。
在我 cd 进入输出文件目录后,这是我的代码:
OUT_FILE="*.out"
OT=$OUT_FILE
STRING="a"
for file in "$OT";do
if [[$file == *"$STRING"*]];then
echo $file
fi
done
Run Code Online (Sandbox Code Playgroud)
我收到的错误是 [[*.out: command not found。看起来 $file 被解释为 $OT,而不是与 $OT 匹配的单个文件。
但是当我删除 if 语句并只执行 for 循环来回显每个 $file 时,输出给了我所有以 .out 结尾的文件。
希望得到一些帮助以了解我做错了什么。提前致谢。
Kus*_*nda 10
[[前后需要空间]]:
for file in *.out;do
if [[ "$file" == *"$STRING"* ]];then
printf '%s\n' "$file"
fi
done
Run Code Online (Sandbox Code Playgroud)
要不就
for file in *"$STRING"*.out; do
printf '%s\n' "$file"
done
Run Code Online (Sandbox Code Playgroud)
或者
printf '%s\n' *"$STRING"*.out
Run Code Online (Sandbox Code Playgroud)
没有像[[(适用于任何 Bourne-heritage shell)之类的 bashisms并且非常快,因为它没有分叉任何实用程序:
for file in *.out; do
case $file in
(*a*) printf '%s\n' "$file";;
esac
done
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以(*a*)用(*$STRING*).
如果你有一个find理解的替代方案-maxdepth 1:
find . -maxdepth 1 -name \*"$STRING"\*.out
Run Code Online (Sandbox Code Playgroud)
PS:你的问题有点不清楚。您a在文件名中发布测试的代码(我的代码也是如此)。但是您的文字表明您要a在文件内容中搜索。是哪个?你能澄清一下吗?
| 归档时间: |
|
| 查看次数: |
24614 次 |
| 最近记录: |