Acho que descobri este aqui ...
$ setenv A abc
$ setenv B 'a_is_${A}'
$ echo $B
> a_is_$A
$ eval echo $B
> a_is_abc
$ setenv A def
$ eval echo $B
> a_is_def
É tudo sobre o uso de uma combinação de 'eval' com citações em torno da variável em primeiro lugar ...
No meu caso, estou usando assim:
set sw_version '${SW_VERSION_MAJOR}.${SW_VERSION_MINOR}'
set sw_plugin_path /path/to/plugins/for/sw/${sw_version}/plugins
if ( $?SW_PATH ) then
setenv SW_PATH ${sw_plugin_path}:$SW_PATH
else
setenv SW_PATH ${sw_plugin_path}
endif
E, no script de wrapper do software, eu só tenho:
eval setenv SW_PATH $SW_PATH
O que significa que posso alterar SW_VERSION_MAJOR ou SW_VERSION_MINOR a qualquer momento, e SW_PATH será alterado de acordo sem precisar ser redefinido do zero.