in reply to if -d
In short, you tried to nest string quoted with single-quotes. That doesn't work. What follows is what bash see and how to fix the problem without changing what Perl sees.
To form the string from the literal
'if (-d "/usr") { print 'yes';}'
bash extracts what's in single quotes and concatenates it with what's not in quotes. That means the following are concatenated together:
Let's use Perl to see how bash sees the command:
$ perl -le'print "[$_]" for @ARGV' -- \ perl -le 'if (-d "/usr") { print 'yes';}' [perl] [-le] [if (-d "/usr") { print yes;}]
Compare with:
'if (-d "/usr") { print '\''yes\''';}'
$ perl -le'print "[$_]" for @ARGV' -- \ perl -le 'if (-d "/usr") { print '\''yes'\'';}' [perl] [-le] [if (-d "/usr") { print 'yes';}]
|
|---|