bash 和其他 shell 中的引用规则与 Ruby、Python 和 Perl 等“普通”脚本语言中的引用规则不同,所以一开始这可能会让人感到困惑,但如果你在 $pic 周围加上双引号,bash 会处理变量的内容正确,即使它包含空格。
这一修复将使您的脚本看起来像这样
#!/bin/sh
cd /tmp/pics
for pic in *.jpg;
do
php -f /tmp/pics/covert.php "$pic";
done
我还会删除每行末尾的分号。仅当您将多条线路挤在一条线上时才需要这些。它们在 bash 中并不像在 PHP 或(在较小程度上)JavaScript 中那样需要。
正如所写,这是使用 Bourne shell 而不是 bash。 (目前我们将忽略 bash 可能会在您的系统上用于模拟 Bourne shell 的事实。)如果您想使用 bash,请更改顶部的“shebang”行。通常是#!/bin/bash。
要处理多个文件扩展名,您可以将它们堆叠在一起,中间有空格,就像这样
for pic in *.jpg *.jpeg *.JPEG *.JPG
正如 Jens 所指出的,您可能会遇到奇怪的极端情况,即文件扩展名是大小写混合的。你可以用括号来处理它来分组字符
for pic in *.[jJ][pP][gG] *.[jJ][pP][eE][gG]
或者您可以使用 glenn 的方法来设置您的 shell 选项以忽略大小写(和 non-matching patterns),然后使用更简单的 glob 模式
shopt -s nocaseglob nullglob
for pic in *.jpg *.jpeg
如果我们采用后一种方法,最终的脚本将如下所示:
#!/bin/bash
cd /tmp/pics
shopt -s nocaseglob nullglob
for pic in *.jpg *.jpeg
do
php -f /tmp/pics/covert.php "$pic"
done
希望这会有所帮助!