To doprowadzało mnie do szału już od wielu godzin.Obsługa argumentów wiersza poleceń Perl ze spacjami ze skryptu bash?
Rozważmy następujący scenariusz testowy w Perlu: (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, to po prostu wypisuje argumenty wiersza poleceń podanych do skryptu.
Na przykład:
$ ./hello.pl apple pie
----------------------------------
thanks, you gave me 2 command-line arguments:
apple
pie
mogę dać skrypt jeden argument z przestrzeni przez otaczający słowa z cudzysłowach:
$ ./hello.pl "apple pie"
----------------------------------
thanks, you gave me 1 command-line arguments:
apple pie
Teraz chcę użyć tego skryptu w powłoce scenariusz. Skonfigurowałem skrypt powłoki w następujący sposób:
#!/bin/bash
PARAM="apple pie"
COMMAND="./hello.pl \"$PARAM\""
echo "(command is $COMMAND)"
$COMMAND
Witam hello.pl z tymi samymi parami i wyciętymi cytatami. Ten skrypt zwraca:
$ ./test.sh
(command is ./hello.pl "apple pie")
----------------------------------
thanks, you gave me 2 command-line arguments:
"apple
pie"
Nawet jeśli zmienna $ POLECENIE echa polecenia dokładnie tak jak na drodze wpadłem skrypt perla z linii poleceń po raz drugi, tym razem nie chce zobaczyć szarlotkę jako pojedynczy argument.
Dlaczego nie?