Meine Lösung ist ein wenig anders. Ich kam zu deiner Frage mit einer Google-Suche den Titel deiner Frage an, aber ich versuche etwas anderes auszuführen. Hier ist es für den Fall, dass es jemand hilft:
FYI, ich habe tcsh auf Solaris verwendet.
Ich hatte folgende Einzeiler:
perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*2));'
, die den Wert ausgibt:
2013-05-06
Ich habe versucht, dies in ein Shell-Skript zu platzieren, damit ich eine Datei mit einem Datum erstellen konnte im Dateinamen die Anzahl der Tage in der Vergangenheit. Ich habe versucht:
set dateVariable=`perl -e 'use POSIX qw(strftime); print strftime("%Y-%m-%d", localtime(time()-3600*24*$numberOfDaysPrior));'`
Aber das hat nicht wegen der variablen Substitution funktioniert. Ich musste mich mit dem Zitat herumschlagen, um es richtig zu interpretieren. Ich habe versucht, die ganze Menge in doppelte Anführungszeichen zu setzen, aber das hat den Perl-Befehl nicht syntaktisch richtig gemacht, da er mit dem doppelten Anführungszeichen im Datumsformat verwechselt wurde. Ich endete mit:
set dateVariable=`perl -e "use POSIX qw(strftime); print strftime('%Y-%m-%d', localtime(time()-3600*24*$numberOfDaysPrior));"`
Was für mich gut funktionierte, ohne auf irgendwelche ausgefallenen Variablen exportieren zu müssen.
Ich weiß, dass dies nicht genau Ihre spezifische Frage beantwortet, aber es beantwortet den Titel und könnte jemand anderem helfen!
Warum führen Sie nicht die Schleife direkt in Perl? Dann verschwindet Ihr Shell-Skript einfach. – FMc
Anstelle von 'cat file | perl ... 'es ist einfacher,' perl ... file' zu verwenden. – TrueY