Точка не является массивом значений, доступ к X, Y, Z - правильный путь.
Я думаю, что вы ищете переменную оболочки $?
, которая дает код выхода предыдущей команды. Например:
$ diff foo.txt foo.txt
$ echo $?
0
Чтобы использовать это в вашем make-файле, вам нужно экранировать $
, как в $$?
:
all:
diff foo.txt foo.txt ; if [ $$? -eq 0 ] ; then echo "no differences" ; fi
Обратите внимание, что каждая команда в вашем правиле Тело в make находится в отдельной подоболочке. Например, следующее не будет работать:
all:
diff foo.txt foo.txt
if [ $$? -eq 0 ] ; then echo "no differences" ; fi
, поскольку команды diff
и if
выполняются в разных процессах оболочки. Если вы хотите использовать выходной статус из команды, вы должны сделать это в контексте той же оболочки, что и в моем предыдущем примере.
Использовать '$$?' вместо '$$!' (благодаря 4-му ответу Сценарий оболочки выхода на основе кода выхода процесса )
Переменная bash - $?
, но почему вы все равно хотите распечатать код состояния?
Не забывайте, что каждая из ваших команд выполняется в отдельных подоболочках.
Вот почему вы довольно часто см. что-то вроде:
my_target:
do something \
do something else \
do last thing.
И при отладке не забывайте о каждой полезной опции -n, которая будет печатать команды, но не выполнять их, и опции -p, которая покажет вам полную среду make, включая информацию о различных битах и кусочках.
HTH
приветствия,
Попробуйте `\ $? ' Я думаю, что $$ интерпретируется make-файлом