Mi solución es un poco diferente. Llegué a su pregunta con una búsqueda en Google, el título de su pregunta, pero estoy tratando de ejecutar algo diferente. Aquí está en caso de que ayude a alguien:
FYI, estaba usando tcsh en Solaris.
que tenía la siguiente de una sola línea:
perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*2));'
que da salida el valor:
2013-05-06
yo estaba tratando de colocar esto en un script de shell para que pudiera crear un archivo con una fecha en el nombre de archivo, de X números de días en el pasado. Intenté:
set dateVariable=`perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*$numberOfDaysPrior));'`
Pero esto no funcionó debido a la sustitución de la variable. Tuve que perder el tiempo con las citas, para lograr que lo interpretara correctamente. Traté de encerrar todo el lote entre comillas dobles, pero esto hizo que el comando Perl no fuera sintácticamente correcto, ya que interfería con las comillas dobles en torno al formato de fecha. Terminé con:
set dateVariable=`perl -e "use POSIX qw(strftime); print strftime('%Y-%m-%d', localtime(time()-3600*24*$numberOfDaysPrior));"`
que funcionó muy bien para mí, sin tener que recurrir a cualquier variable de exportación de fantasía.
Me doy cuenta de que esto no responde exactamente a su pregunta específica, pero contestó el título y podría ayudar a otra persona.
Por qué no realizar el bucle directamente en Perl? Entonces su script de shell simplemente desaparece. – FMc
en lugar de usar 'cat file | perl ... 'es más fácil de usar' perl ... file'. – TrueY