我正在尝试编写一个脚本,显示目录中比参数中给出的文件更新的文件,但我似乎遇到了问题。目前我有:
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
虽然[[
是一个 bash 关键字,但它有类似的要求。
[
通常还建议尽可能在脚本中使用与 POSIX 兼容的版本。[[
它不是标准版本,因此不能在所有 POSIX shell 上运行。