Вы можете просто загрузить jq
двоичный файл для вашей платформы и запустить (chmod +x jq
):
$ curl 'https://twitter.com/users/username.json' | ./jq -r '.name'
Он извлекает атрибут "name"
из объекта json.
jq
homepage говорит, что это похоже на sed
для данных JSON.
где определение макроса может иметь несколько значений
blockquote>Макрос не имеет значений. Макрос - это конструкция манипуляции токеном. Когда препроцессор расширяет его, он превращает (ноль или более) входных токенов в выходные токены. Выходные токены просто должны быть действительными токенами, они даже не должны быть действительным кодом Си. Например:
#define foo(t) 1 > 0 t 0 : 1
Это совершенно правильное функциональное определение макроса. Когда мы пишем
foo(;)
илиfoo(3)
, препроцессор подставляет аргумент в последовательность токенов, которую он выплевывает. Конечно, для аргументов, которые мы предоставили, результат синтаксически неверен C. Ноfoo(?)
приведет к действительному C.Смысл этой преамбулы состоял в том, чтобы объяснить, что эти точки с запятой не делают ничего особенного. Они являются лишь частью последовательности токенов, которую выкладывает макрос. Этот макрос предназначен для замены себя последовательностью объявлений и определений функций, которые реализуют системный вызов. Объявления и операторы в органах функций должны заканчиваться символом
;
. Ничего больше.
В этом случае вы не видите определение макроса с несколькими значениями, вы видите определение макроса, которое занимает несколько строк. Таким образом, в основном, __SYSCALL_DEFINEx (x, name, ...) будет заменен целым блоком кода ниже (обратите внимание, что \ в конце строки предназначен для охвата нескольких строк, и, конечно, каждая строка кода заканчиваться на;).