我正在嘗試製作一個腳本,顯示目錄中的文件比作為參數給出的文件更新,但我似乎遇到了問題。目前我有:
for f in *; do
if [["$f" -nt "$1"]]; then
echo "$f"
fi
done
然而,這一直給我一個錯誤,無法在引用正在迭代的檔案時找到命令。如何解決此腳本的問題?
答案1
[[
和周圍需要空間]]
for f in *; do
if [[ "$f" -nt "$1" ]]; then
echo "$f"
fi
done
如果沒有空格,您將收到一系列「找不到命令」錯誤。這是因為 shell 尋找名為 的指令[["$f"
但找不到它。您要執行的命令是[[
。
選擇
無需循環:
find . -maxdepth 1 -newer "$1"
答案2
您需要在 後面留一個空格[[
,在 之前再留一個空格]]
。這是來自 的繼承[
,傳統上它是一個實際的可執行檔(/bin/[
符號連結到/bin/test
) - 您需要一個空格來強制將其作為[
參數expression
而不是[expression
.
while[[
是一個 bash 關鍵字,它有類似的要求。
[
通常也建議盡可能在腳本中使用 POSIX 相容版本。[[
不是標準的,因此不適用於所有 POSIX shell。