The answer by Chris Dodd is correct, insofar as there's no intrinsic meaning to the shell -- and @foo@
is thus commonly used as a sigil. Insofar as you encountered this in nixpkgs, it provides some stdenv tools specifically for implementing this pattern.
As documented at https://nixos.org/manual/nixpkgs/stable/#ssec-stdenv-functions, nixpkgs stdenv provides shell functions including substitute
, substituteAll
, substituteInPlace
&c. which will replace @foo@
values with the content of corresponding variables.
In the context of the linked commit, subsitutions of that form can be seen being performed in pkgs/build-wrapper/gcc-wrapper/builder.sh
:
sed \
-e "s^@gcc@^$src^g" \
-e "s^@out@^$out^g" \
-e "s^@bash@^$SHELL^g" \
-e "s^@shell@^$shell^g" \
< $gccWrapper > $dst
...is replacing @out@
with the value of $out
, @bash@
with the value of $SHELL
, etc.