Это уже несколько часов сводит меня с ума.
Рассмотрим следующий тестовый сценарий на 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 из командной строки во второй раз, на этот раз она не хочет видеть яблочный пирог как единственный аргумент.
Почему нет?