我写了一个小脚本来旋转目录的所有奇数图片,但我无法让它工作。这是代码。
#!/bin/bash
count=1
for picture in `ls -v *.png`
do
if ["$picture" == "picture_$count.png"]
then
mogrify -rotate 90 "$picture"
count=$(($count+2))
fi
done
Run Code Online (Sandbox Code Playgroud)
有什么建议?
相反,只需让 shell 为您抓取所有奇数文件即可。它既安全又简单:
#!/bin/bash
for picture in *[13579].png
do
mogrify -rotate 90 "$picture"
done
Run Code Online (Sandbox Code Playgroud)
[]
在 shell glob 中匹配任何单个字符,因此通过列出所有奇数数字,完整模式匹配当前目录中以odd_digit .png结尾的任何文件。无需维护运行计数,并且由于文件名扩展(即 shell globbing)是命令行在执行之前发生的最后一件事,因此它不会被带有时髦字符的文件名绊倒。
从而与您的原始脚本的具体问题是什么,它是作为nullterminatedstring指出的那样,你需要周围的空间[
,并]
在该if
行。那是因为[
不是 的特殊语法if
,它只是另一个命令:/bin/[
,它是test
命令的同义词。([
出于性能原因,您的 shell 可能提供了它自己的内置版本,但它的行为仍应与外部命令相同,包括所有解析限制。)
没有[
and之间的空格"$picture"
,你告诉你bash
运行一个命令,类似于[picture_1.png
有两个参数的东西:==
and picture_1.png]
。由于您的计算机上可能没有调用命令[picture_1.png
,因此您的脚本将失败。
周围的空间[
和]
,你会运行命令[
用四个参数:picture_1.png
,==
,picture_1.png
,和]
。