Presumably, you are running El Capitan (OS X 10.11) or later. It’s a side effect of System Integrity Protection. From the System Integrity Protection Guide: Runtime Protections article:
When a process is started, the kernel checks to see whether the main
executable is protected on disk or is signed with an special system
entitlement. If either is true, then a flag is set to denote that it
is protected against modification. …… Any dynamic linker (
dyld
)
environment variables, such asDYLD_LIBRARY_PATH
, are purged when
launching protected processes.
All of the system-provided interpreters, including /bin/sh
, are protected in this fashion. Therefore, when you invoke sh
, all DYLD_* environment variables are purged.
You could write a shell script which sets DYLD_LIBRARY_PATH
and then executes .sconf_temp/conftest_7
. You can use the the shell interpreter to execute that — indeed, you must — and the environment variable will be fine, since the purging happens when a protected executable is started. Basically, this approach is analogous to the working example in your question, but encapsulated in a shell script.