Handling von Perl Kommandozeilen-Argumente mit Leerzeichen aus einem bash-Skript?

Diese wurde driving me nuts für Stunden jetzt.

Betrachten Sie die folgende test-Skript in 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";
}

Ok, es ist einfach, druckt der Befehl Linie Argumente an das Skript.

Zum Beispiel:

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

Ich kann dir das Skript ein einziges argument mit einem Leerzeichen um die Wörter mit doppelten Anführungszeichen:

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

Nun möchte ich dieses Skript in ein shell-Skript. Ich habe das shell-script wie dieses:

#!/bin/bash

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

echo "(command is $COMMAND)"
$COMMAND

Ich rufe die hello.pl mit der gleichen params und escaped quotes.
Dieses Skript gibt:

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

Obwohl die $variable "BEFEHL", hallt der Befehl genau wie die Art, lief ich das perl-script von der Kommandozeile aus das zweite mal, dieses mal tut es nicht sehen wollen, die apple-pie als ein einziges argument.

Warum nicht?

Schreibe einen Kommentar