Сделать сортировку встроенной функцией - PullRequest
0 голосов
/ 21 февраля 2019

GNU Make https://www.gnu.org/software/make/manual/make.html#toc-Functions-for-Transforming-Text имеет функцию сортировки.В описании функции сортировки указано, что функция сортировки

сортирует слова списка в лексическом порядке, удаляя повторяющиеся слова.Вывод - это список слов, разделенных пробелами.

Я создал такой тестовый make-файл

TEST="this is a test test test test test"

all:

     @echo $(sort $(TEST))

Мой вывод Это тестовый тест

Дубликаты не были полностью удалены из строки!Я неправильно интерпретирую функцию сортировки?Или это ошибка с GNU Make?

1 Ответ

0 голосов
/ 21 февраля 2019

Двойные кавычки ни в коем случае не являются особенными.Таким образом, переменная TEST содержит слова "This, is, a, test, test, test и test", которые затем сортируются с удалением дубликата как "This, a, is, test и test" и, таким образом, оболочка получает (1) echo "This a is test test", интерпретирует двойную кавычку как строковые маркеры и выводит This a is test test (а не This is a test test см. Место a).


(1) Полезный совет для отладки такой проблемы, как эта, - установить для переменной SHELL значение /bin/echo, чтобы вы могли видеть, что получает оболочка.Например, в результате вы получили бы -c echo "this a is test test" с Makefile

TEST="this is a test test test test"
SHELL=/bin/echo
all:
    @echo $(sort $(TEST))
...