2014-03-25 66 views

回答

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 
+2

'bash'可以使用正則表達式,但在不同的上下文中。 – chepner

+0

謝謝@chepner。糾正了答案以避免混淆。 –

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/.*

+0

+1實際解釋發生了什麼。 –

相關問題