La mia soluzione è leggermente diversa. Sono giunto alla tua domanda con una ricerca su Google il titolo della tua domanda, ma sto cercando di eseguire qualcosa di diverso. Qui è nel caso in cui aiuti qualcuno:
FYI, stavo usando tcsh su Solaris.
ho avuto il seguente one-liner:
perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*2));'
che emette il valore:
2013-05-06
stavo cercando di mettere questo in uno script di shell in modo da poter creare un file con una data nel nome del file, di X numeri di giorni nel passato. Ho provato:
set dateVariable=`perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*$numberOfDaysPrior));'`
Ma questo non ha funzionato a causa di sostituzione variabile. Ho dovuto scherzare con il quoting, per farlo interpretare correttamente. Ho provato a racchiudere l'intero lotto tra virgolette doppie, ma questo ha reso il comando Perl non corretto in modo sintattico, poiché ha incasinato le doppie virgolette sul formato data. Ho finito con:
set dateVariable=`perl -e "use POSIX qw(strftime); print strftime('%Y-%m-%d', localtime(time()-3600*24*$numberOfDaysPrior));"`
Che ha funzionato benissimo per me, senza dover ricorrere a qualsiasi esportazione di variabili di fantasia.
Mi rendo conto che questo non corrisponde esattamente alla tua domanda specifica, ma ha risposto al titolo e potrebbe aiutare qualcun altro!
Perché non eseguire il loop direttamente in Perl? Quindi lo script della shell scompare semplicemente. – FMc
Invece di usare 'cat file | perl ... 'è più semplice usare' perl ... file'. – TrueY