#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
我在hatch目录下有文件,但它显示"找不到文件"。为什么会这样?
谢谢!
答案 0 :(得分:3)
在非数组变量赋值的右侧不会发生路径名扩展,因此file
包含文字*
,而不是文件名列表。路径名扩展也不在[[ ... ]]
内执行,因此您询问/ home / yaal / temp / hatch`中是否存在名为*
的文件。
如果您只是想知道.
中是否至少有一个文件(不包括以hatch
开头的文件),请尝试
for f in /home/yaal/temp/hatch/*; do
if [[ -f $f ]]; then
echo "$file"
else
echo "No files found"
fi
break
done
您也可以填充一个数组,然后检查它是否为空:
files=( /home/yaal/temp/hatch/* )
if (( ${#files[@]} > 0 )); then
echo "${files[0]}" # First file found
else
echo "No files found"
fi
如果您确实要考虑以.
开头的文件名,请使用shopt -s dotglob
,或使用两种模式/home/yaal/temp/hatch/* /home/yaal/temp/hatch/.*
。
答案 1 :(得分:2)
理想情况下,您希望使用for loop
检查文件是否存在,因为路径名扩展不会在[[ ... ]]
内发生。使用类似的东西:
#!/bin/bash
for file in /home/yaal/temp/hatch/*; do
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
done