Программа make
устанавливает переменную MAKE
, которая может использоваться в make-файлах как $(MAKE)
или ${MAKE}
. Последнее полезно, потому что сценарии оболочки распознают этот синтаксис, и можно повторно использовать некоторые фрагменты сценария между ними.
Помимо этого, между синтаксисом shell/make не так много совпадений, поскольку make
обрабатывает такие вещи, как $$
, иначе, чем shell.
Обращение к сути вопроса :переменная MAKE
помогает с рекурсией, так как программа на самом деле не может быть названа make
(, например, gmake
, pmake
), и вам нужен этот бит информации, чтобы успешно повторяться в той же программе. Программа make
(, однако она (re )с именем )), распознает эту рекурсию независимо от того, используется переменная или нет.
Дополнительная литература:Создание POSIX
Вы можете отсортировать имена файлов в обратном порядке, а затем выбрать первое вхождение каждого имени файла:
$ cat input
ac-1
ac-2
bc-1
bc-2
$ cat input | sort -r | awk -F '-' '!seen[$1]++'
bc-2
ac-2
Команда awk принимает ' -' в качестве разделителя, а затем печатает каждую строку, в которой первый столбец элемента (ac,ac,bc,bc )появился первым. Это, конечно, предполагает, что номер версии всегда начинается после первого «-».
Короткий сценарий bash, который использует GNUdatamash
для нахождения максимумов:
#!/bin/bash
mapfile -t files < <(datamash -st'-' -g1 max 2 < "$1")
IFS=,
echo "${files[*]}"
Использование:
$./example.sh input.txt
ac-2,bc-2