#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
我有在孵化目錄下的文件,但它顯示「找不到文件」。爲什麼?腳本不顯示目錄中存在的文件名
謝謝!
#!/bin/bash
file=/home/yaal/temp/hatch/*;
if [[ -f $file ]]; then
echo $file
else
echo "No files found"
fi
我有在孵化目錄下的文件,但它顯示「找不到文件」。爲什麼?腳本不顯示目錄中存在的文件名
謝謝!
理想情況下,您希望使用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
路徑擴展不會對非數組變量賦值的右側會出現,所以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實際解釋發生了什麼。 –
'bash'可以使用正則表達式,但在不同的上下文中。 – chepner
謝謝@chepner。糾正了答案以避免混淆。 –