Я пытаюсь сделать скрипт, который показывает файлы в каталоге, более новые, чем тот, который указан в качестве аргумента, но, похоже, я столкнулся с проблемой. В настоящее время у меня есть:
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
Без пробелов вы получите ряд ошибок "команда не найдена". Это происходит потому, что оболочка ищет команду по имени [["$f"
и не может ее найти. Команда, которую вы хотите выполнить, — [[
.
Альтернатива
Без необходимости зацикливания:
find . -maxdepth 1 -newer "$1"
решение2
Вам нужен пробел после [[
и еще один перед ]]
. Это перенесено из [
, который традиционно является исполняемым файлом ( /bin/[
, ссылающимся на /bin/test
) — вам нужен был пробел, чтобы заставить его оцениваться как [
с expression
аргументами, а не как [expression
.
Хотя [[
это ключевое слово bash, к нему предъявляются схожие требования.
Также обычно рекомендуется использовать [
в скриптах POSIX-совместимость везде, где это возможно. [[
не является стандартом и поэтому не будет работать на всех оболочках POSIX.