脚本不显示目录中存在的文件名

时间:2014-03-25 19:55:25

标签: bash shell scripting

#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f  $file ]]; then
 echo $file
else 
echo "No files found"
fi

我在hatch目录下有文件,但它显示"找不到文件"。为什么会这样?

谢谢!

2 个答案:

答案 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