从 bash 脚本生成并运行 perl 脚本

use*_*071 0 bash perl

我正在尝试生成一个 perl 脚本并从 bash 脚本运行它,但我遇到了问题:

#!/bin/bash
str="perl"
array=( one two three )
for i in "${array[@]}"
do
   str=$str" -e 'print \"$i \";'"
done
echo "$str"
echo "AND THE PERL OUTPUT: "
$str
Run Code Online (Sandbox Code Playgroud)

生成输出:

perl -e 'print "one ";' -e 'print "two ";' -e 'print "three ";'
AND THE PERL OUTPUT:
Can't find string terminator "'" anywhere before EOF at -e line 1.
Run Code Online (Sandbox Code Playgroud)

当我perl -e 'print "one ";' -e 'print "two ";' -e 'print "three ";'手动运行生成的 perl 命令时,它可以工作,但是当我尝试从 bash 脚本运行它时,我得到Can't find string terminator "'" anywhere before EOF at -e line 1.

似乎无法弄清楚我在哪里错过了终结者

Phi*_*ppe 5

bash 将其'print视为一个单元,它已找到一个开头',但未能找到一个结尾(字符串终止符)。

这是一个更安全的版本:

#!/usr/bin/env bash

str=(perl)
array=( one two three )
for i in "${array[@]}"
do
   str+=(-e "print '$i ';")
done
echo "${str[@]}"
echo "AND THE PERL OUTPUT: "
"${str[@]}"
Run Code Online (Sandbox Code Playgroud)