Les Plists, ou listes de propriétés, ne sont qu'un format de fichier permettant de stocker des objets sérialisés - par exemple des configurations ou autres. Le format de fichier spécifie comment les chaînes de caractères sont stockées, mais il ne spécifie rien sur les détails de plus haut niveau - comme la façon dont les noms de fichiers sont stockés, analysés ou traités.
Cela signifie qu'il n'est pas possible de répondre à votre question en général pour les plists.
L'interprétation de $HOME, ~ et des variables d'environnement en général dans les plists est donc spécifique à l'application. Pour certains programmes, cela pourrait fonctionner - pour d'autres, non. Cela dépend entièrement de la façon dont le programme a été créé.
MISE À JOUR : Vous avez modifié votre question pour qu'elle concerne spécifiquement LaunchDaemons, et non les listes en général.
Pour /Library/LaunchDaemons/startup.plist
il n'est pas possible de se référer directement aux variables d'environnement que vous mentionnez. Elles ne sont pas analysées et remplacées par des valeurs par launchd. De plus, cela n'aurait probablement pas fonctionné comme vous le pensiez même si elles l'avaient été, car les démons de lancement sont exécutés par Root si rien d'autre n'est spécifié.
Ce que vous pouvez faire, c'est référencer un programme dans la section startup.plist
qui, lorsqu'il est exécuté, peut accéder à l'environnement et effectuer la substitution de variable pour vous. Par exemple, comme ceci :
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>exec $HOME/startup.sh</string>
</array>