2

Я пытаюсь сделать скрипт, который показывает файлы в каталоге, более новый, чем тот, который указан в качестве аргумента, но я, похоже, столкнулся с проблемой. В настоящее время у меня есть:

for f in *; do 
    if [["$f" -nt "$1"]]; then 
        echo "$f"
    fi 
done

Однако это продолжает давать мне сообщение об ошибке, что команды не могут быть найдены в отношении файлов, которые перебираются. Как я могу исправить проблемы с этим скриптом?

2 ответа2

1

Вам нужны пробелы вокруг [[ и ]]

for f in *; do
    if [[ "$f" -nt "$1" ]]; then
        echo "$f"
    fi
done

Без пробелов вы получите серию ошибок "команда не найдена". Это потому, что оболочка ищет команду по имени [["$f" и не может ее найти. Команда, которую вы хотите выполнить - [[ .

альтернатива

Без необходимости зацикливания:

find . -maxdepth 1 -newer "$1"
0

Вам нужен пробел после [[ и еще один до ]] . Это перенос из [ , который обычно является фактическим исполняемым файлом (/bin/[ , символическая ссылка на /bin/test) - вам нужно было пространство, чтобы заставить его быть оцененным как [ с аргументами expression а не [expression .

Хотя [[ является ключевым словом bash, оно имеет аналогичное требование.

Также обычно рекомендуется использовать POSIX-совместимый [ в ваших сценариях, где это возможно. [[ не является стандартным и поэтому не будет работать на всех оболочках POSIX.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .