Alias no tienen un "medio ambiente". Un alias es simplemente una sustitución de texto "tonto". En la pregunta, no se usa una variable de entorno, solo una variable de shell. Si desea usar el entorno, use una función. En este caso, no hay ventaja para un alias sobre una función.
$ alias foo='echo "$bar"'
$ bar=hi foo
Esto produce ninguna salida porque el entorno para establecer un simple comando no se aplica a las expansiones.
$ alias foo=$'eval \'echo "$bar"\''
$ bar=hi foo
hi
Si se utilizara una función en su lugar, no habría ningún problema.
$ foo() { echo "$bar"; }
$ bar=hi foo
hi
En caso de duda, utilice siempre una función.
Editar
Técnicamente, lo anterior es bash-solamente. Hacer esto de una manera totalmente portátil es casi imposible.
En el tablero, mksh, modo POSIX fiesta, y otros proyectiles POSIX que puede hacer:
foo() { echo "$bar"; }
bar=hi command eval foo
Sin embargo, esto no va a funcionar en ksh93 o zsh. (Ya he informado de un error para ksh93 pero puede que nunca se solucione). En mksh y ksh93, en su lugar, debe definir funciones usando la palabra clave function
, pero eso no es POSIX. No estoy al tanto de ninguna solución que funcione en todas partes.
Para empeorar las cosas, se están añadiendo excepciones adicionales a POSIX 2008-TC1, por lo que la forma en que funcionan las asignaciones de entorno será aún más complicada. Sugiero no usarlos a menos que realmente sepas lo que estás haciendo.
También 'alias test = echo \ $ bar' (misma idea, la expansión se suprime) –
Respuesta correcta, solo tenga cuidado aliasing' test', es un comando real. – Kevin
'alias foo = 'echo" $ bar "''. La 'exportación' es innecesaria. – ormaaj