Esto me ha estado volviendo loco durante horas.Manejando argumentos de línea de comando de Perl con espacios de un script bash?
Considérese el siguiente script en perl prueba: (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 simplemente imprime los argumentos de línea de comandos dados a la secuencia de comandos.
Por ejemplo:
$ ./hello.pl apple pie
----------------------------------
thanks, you gave me 2 command-line arguments:
apple
pie
que puedo dar el guión un solo argumento con un espacio que rodea las palabras con comillas dobles:
$ ./hello.pl "apple pie"
----------------------------------
thanks, you gave me 1 command-line arguments:
apple pie
ahora quiero utilizar esta secuencia de comandos en un shell guión. He configurado el script de shell como esto:
#!/bin/bash
PARAM="apple pie"
COMMAND="./hello.pl \"$PARAM\""
echo "(command is $COMMAND)"
$COMMAND
Estoy llamando a la hello.pl con los mismos parametros y escapé comillas. Este script devuelve:
$ ./test.sh
(command is ./hello.pl "apple pie")
----------------------------------
thanks, you gave me 2 command-line arguments:
"apple
pie"
A pesar de que la variable $ COMANDO se hace eco del comando exactamente igual que la forma me encontré con el script de perl desde la línea de comandos la segunda vez, esta vez no quiere ver el pastel de manzana como un solo argumento
¿Por qué no?