C/C++ 言語内で、Unix で環境変数を解決するために私が行っていることを次に示します。fs_parm ポインターには、展開される可能性のある環境変数のファイル仕様 (またはテキスト) が含まれます。wrkSpc が指すスペースは、MAX_PATH+60 文字の長さでなければなりません。エコー文字列の二重引用符は、ワイルド カードが処理されないようにするためのものです。ほとんどのデフォルト シェルは、これを処理できるはずです。
FILE *fp1;
sprintf(wrkSpc, "echo \"%s\" 2>/dev/null", fs_parm);
if ((fp1 = popen(wrkSpc, "r")) == NULL || /* do echo cmd */
fgets(wrkSpc, MAX_NAME, fp1) == NULL)/* Get echo results */
{ /* open/get pipe failed */
pclose(fp1); /* close pipe */
return (P_ERROR); /* pipe function failed */
}
pclose(fp1); /* close pipe */
wrkSpc[strlen(wrkSpc)-1] = '\0';/* remove newline */
MS Windows の場合、ExpandEnvironmentStrings() 関数を使用します。