if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
else
echo Nothing here
fi
返回
意外标记'else'附近的语法错误
新的。谁能指出我做错了什么?
答案 0 :(得分:3)
你忘记了done
!
if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
done
else
echo Nothing here
fi
答案 1 :(得分:3)
您收到语法错误的原因是因为您没有使用“done”语句结束循环。在这种情况下,您应该使用while循环而不是for循环,因为如果任何文件名包含空格或换行符,for循环将会中断。
此外,如果glob扩展为多个文件,您发出的测试命令也会出现语法错误。
$ [ ! -f ./* ]
bash: [: too many arguments
这是检查目录是否包含任何文件的更好方法:
files=(./*) # populate an array with file or directory names
hasfile=false
for file in "${files[@]}"; do
if [[ -f $file ]]; then
hasfile=true
break
fi
done
if $hasfile; then
while read -r file; do
echo "$file"
done < <(find . -maxdepth 1 -type f)
fi
另外,如果你有GNU find:
,你可以简单地用find -print替换while循环if $hasfile; then
find . -maxdepth 1 -type f -print
fi
答案 2 :(得分:0)
“for”的语法是
for:for NAME [in WORDS ...;] do COMMANDS;完成
你错过了“完成”
尝试
if [ ! -f ./* ]; then
for files in $(find . -maxdepth 1 -type f); do
echo $files
done
else
echo Nothing here
fi
顺便说一句,你的意思是用小写而不是ECHO回声吗?