Что делает этот скрипт? - PullRequest
2 голосов
/ 17 мая 2011

Я просматриваю учебник «Расширенное автоматическое создание зависимостей» и нашёл скрипт с таким кодом:

 %.P : %.c
   ....; [ -s $@ ] || rm -f $@

Что делает эта часть цели?Я знаю, что видел такой синтаксис: [...]||... раньше в скриптах bash, но не могу вспомнить, как он работает точно ...

Заранее спасибо !!

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Тест [ -s $@ ] проверяет наличие файла, который не является пустым.

  • Если файл не пустой, не удаляйте его.
  • Если файл пуст, удалите (пустой) файл.

Последовательность [ -s $@ ] || rm -f $@, следовательно, удаляет текущий целевой файл ($@ в make нотации), если это пустой файл.

Это интересная комбинация обозначений оболочки и make. Часть $@ является обозначением make для создаваемой цели. (Это также нотация оболочки для полного списка аргументов скрипта оболочки, но в этом контексте нотация make имеет приоритет над нотацией оболочки - оболочка не видит $@.)

2 голосов
/ 17 мая 2011

Если предыдущая команда не выполнена (т.е. [), выполняется следующая команда (rm). Ошибка - ненулевой код возврата.

...