I need to execute the same perl script, multiple times, on different files.
To ease the process, I am trying to save the perl script as a bash string, and call perl over the string, as in the "doesn't work" part of the code below:
#!/bin/sh
# works
perl -e 'print 1;'
# doesn't work
S="'print 1;'"
perl -e $S
perl -e $S
I get the following output:
1Can't find string terminator "'" anywhere before EOF at -e line 1.
Can't find string terminator "'" anywhere before EOF at -e line 1.
What am I doing wrong here? Can I achieve the same effect in some other way?
You simply have too many quotes in your string
$S
:I have also added some double quotes around
"$S"
, which prevents problems with word splitting.Another option is to use the
-x
switch to Perl:$0
is the name of the current script, so Perl looks for the first line starting with#!
and containingperl
and interprets everything up to__END__
as a Perl script. Theecho >/dev/null
prevents the Perl script from being interpreted by the shell.