Если кажется, что функция в Makefile игнорирует условие и неожиданно выполняется

Попробуйте это:

awk -v TA=ة -v HA=ه '
        { orig = $0 }
        sub(HA"$", TA) { $0 in ta || ha[$0] = orig; next }
        $0 ~ TA"$" { ta[$0] = 1; delete ha[$0] }
        { print }
        END{ for(i in ha) print ha[i] }
' input_file | LC_ALL=C sort -u > output_file

Я пытался сделать что-то поумнее, создав кастом LC_COLLATE, но не получилось ;-)

0
20.03.2021, 10:21
2 ответа

Вы путаете $(if cond,true_path,false_path)с условными операторами make ifeq.

Для вашего варианта использования вы можете определить переменную make $(STATUS)и проверить в операторе if отсутствие установки.

STATUS := $(if $(strip $(shell pacman -Qq zsh | awk '{print $$1}')),,$(strip $(shell pacman -Sy --noconfirm zsh)))
0
28.04.2021, 22:58

Это можно записать следующим образом:

$(eval PkgName := $(shell pacman -Qq zsh | awk '{print $$1}'))

$(if ${PkgName},,pacman -Sy --noconfirm zsh)

Это должно сделать все это без ошибок.

Еще раз спасибо, я надеюсь, что это может помочь кому-то в будущем.

0
28.04.2021, 22:58

Теги

Похожие вопросы