Обработка Perl аргументы командной строки с пробелами из сценария bash?

Это уже несколько часов сводит меня с ума.

Рассмотрим следующий тестовый сценарий на perl: (hello.pl)

#!/usr/bin/perl
print "----------------------------------\n";
$numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments:\n";

foreach $argnum (0 .. $#ARGV) {
    print "$ARGV[$argnum]\n";
}

Хорошо, он просто выводит аргументы командной строки, данные сценарию.

Например:

$ ./hello.pl apple pie
----------------------------------
thanks, you gave me 2 command-line arguments:
apple
pie

Я могу дать сценарию единственный аргумент с пробелом, заключив слова в двойные кавычки :

$ ./hello.pl "apple pie"
----------------------------------
thanks, you gave me 1 command-line arguments:
apple pie

Теперь я хочу использовать этот сценарий в сценарии оболочки. Я настроил сценарий оболочки следующим образом:

#!/bin/bash

PARAM="apple pie"
COMMAND="./hello.pl \"$PARAM\""

echo "(command is $COMMAND)"
$COMMAND

Я вызываю hello.pl с теми же параметрами и экранированными кавычками. Этот сценарий возвращает:

$ ./test.sh 
(command is ./hello.pl "apple pie")
----------------------------------
thanks, you gave me 2 command-line arguments:
"apple
pie"

Несмотря на то, что переменная $ COMMAND повторяет команду точно так же, как я запускал сценарий perl из командной строки во второй раз, на этот раз она не хочет видеть яблочный пирог как единственный аргумент.

Почему нет?

5
задан Symen Timmermans 4 March 2011 в 13:41
поделиться