【发布时间】:2015-10-26 04:24:33
【问题描述】:
我正在尝试编写一个简单的循环,它将遍历当前目录中的文件并打印文件名。
我试过了:
#!/bin/bash
FILES=/Users/nick/Desktop/*.jpg
for f in $FILES
do
echo $f
done
但它没有用。运行 ./script 它只是打印了“/Users/nick/Desktop/*.jpg”。没有错误
我在 MacBook Pro 10.10.4 上运行它
谢谢
【问题讨论】:
-
“没用”是什么意思?它打印了什么吗?你收到错误了吗?你是如何保存脚本的,你是如何运行它的?
-
@choroba 我更新了问题
-
@NikosDim 如果您看到“/Users/nick/Desktop/*.jpg”作为输出,很可能是因为该模式不匹配任何内容。如果您只是“回显 /Users/nick/Desktop/*.jpg”(不带引号)会发生什么?这种行为在 bash 中是一种“陷阱”,因为即使实际上没有找到任何文件,$FILES 仍会评估为 glob 模式。一个常见的做法是添加一个 'if [ -e $f ];然后 ... fi' 围绕你的 for 循环的主体进行测试,以处理无法匹配任何文件的 glob。您能否确认您的 ~/Desktop 中是否有任何 .jpg 文件?
-
现在可以使用了。不知道我做错了什么。 Desktop 中肯定有 jpg 文件。 Echo 正在按预期爆炸。