这一定很简单,但我无法弄清楚.
for filename in *[^\.foo].jpg
do
echo $filename
done
Run Code Online (Sandbox Code Playgroud)
而不是匹配的文件名,echo显示模式:
+ echo '*[^.foo].jpg'
*[^.foo].jpg
Run Code Online (Sandbox Code Playgroud)
意图是找到所有以.jpg但不是结尾的文件.foo.jpg.
编辑:按照(被误解的)建议尝试:
for filename in *[!".foo"].jpg
还没有!
你实际上可以用extglob做到这一点.要演示,复制并粘贴以下代码:
shopt -s extglob
cd "$(mktemp -d "${TMPDIR:-/tmp}/test.XXXXXX")" || exit
touch hello.txt hello.foo hello.foo.jpg hello.jpg
printf '%q\n' !(*.foo).jpg
Run Code Online (Sandbox Code Playgroud)
输出应该是:
hello.jpg
Run Code Online (Sandbox Code Playgroud)