Значение? = И? == в bitbake / yocto

Что на самом деле такое назначение означает в сценариях Bash

BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}" PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}" MACHINE ??= "qemux86" 

Что из вышеперечисленного является аналогом для Ruby's bb_number_threads ||= 'something'

В соответствии с этим разделом руководства Bitbake

? = is:

Вы можете использовать оператор «? =» Для достижения «более мягкого» назначения для переменной. Этот тип присваивания позволяет вам определить переменную, если она не определена, когда оператор разбирается, но оставить значение в одиночку, если переменная имеет значение. Вот пример:

A ?= "aval"

Если значение A задано во время анализа этого оператора, переменная сохраняет свое значение. Однако, если A не задано, переменной присваивается значение «aval».

= =

Можно использовать «более слабое» назначение, чем в предыдущем разделе, используя оператор «?? =». Это присвоение ведет себя идентично «? =», За исключением того, что назначение выполняется в конце процесса синтаксического анализа, а не сразу. Следовательно, когда существует несколько «?? =» назначений, используется последний. Кроме того, любое присваивание «=» или «? =» Переопределит значение, заданное с помощью «?? =». Вот пример:

  A ??= "somevalue" A ??= "someothervalue" 

Если значение A задано до анализа синтаксических выражений, переменная сохраняет свое значение. Если A не задано, переменная устанавливается на «someothervalue».

Опять же, это назначение является «ленивым» или «слабым» назначением, потому что оно не происходит до конца процесса синтаксического анализа.