To improve compile times, the Arch wiki states,

Users with multi-core/multi-processor systems can specify the number of jobs to run simultaneously. This can be accomplished with the use of nproc to determine the number of available processors, e.g. MAKEFLAGS="-j$(nproc)".

If I set this in Fish shell via set -Ux MAKEFLAGS "-J$(nproc)", then I receive the error:

fish: $(...) is not supported. In fish, please use '(nproc)'.
set -Ux MAKEFLAGS "-J$(nproc)"

I can set this variable in two ways without receiving an error:

  1. set -Ux MAKEFLAGS "-J(nproc)"

  2. set -Ux MAKEFLAGS '-J$(nproc)'

Which of these is the correct method? Or are they both okay?


2 Answers 2


Neither. In fish, command substitution cannot be quoted.

set arg "-J(nproc)"
set -S arg
$arg: set in global scope, unexported, with 1 elements
$arg[1]: |-J(nproc)|


set -Ux MAKEFLAGS "-J"(nproc)

As of fish 3.4.0, command substitutions can be quoted using the "$()" syntax, so the original command works now.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.