2010-07-25 17 views
2

Je dois modifier un script ksh existant qui regarde les arguments de la ligne de commande en utilisant 'shift', et donc vide $ @, mais qui veut maintenant passer les arguments d'origine à un deuxième script après.Stockage de tableau d'entrée ksh en variable et passage à un autre script

Dans le cas de la ligne principale, je peux le faire en copiant $ @ dans une variable et en passant cela au second script, mais je ne peux pas l'obtenir pour les arguments de ligne de commande entre guillemets.

Si j'ai un script appelé 'imprimante' comme ci-dessous:

#!/bin/ksh 

[email protected] 
echo "Printing args" 
until [[ $# -eq 0 ]];do 
    echo $1 
    shift 
done 

./printer2 $INPUT 

et printer2 comme ci-dessous:

#!/bin/ksh 

echo "Printing second args" 
until [[ $# -eq 0 ]];do 
    echo $1 
    shift 
done 

Je voudrais que la sortie de

./printer first second "third forth" 

être :

Printing args 
first 
second 
third forth 
Printing second args 
first 
second 
third forth 

J'ai essayé différentes combinaisons de guillemets autour des variables (à la fois dans l'affectation de $ INPUT et lors de la transmission à printer2) mais je n'arrive pas à le comprendre. Quelqu'un peut-il aider?

Répondre

4

Ok Je pense que j'ai trouvé la solution après un tas d'essais et d'erreurs.

Affectation $ INPUT comme ceci:

set -A INPUT "[email protected]" 

puis il passe comme ceci:

./printer2 "${INPUT[@]}" 

produit la sortie que je suis après.

Le premier script entier est donc:

#!/bin/ksh 

set -A INPUT "[email protected]" 
echo "Printing args" 
until [[ $# -eq 0 ]];do 
    echo $1 
    shift 
done 

./printer2 "${INPUT[@]}" 

et

./printer first second "third fourth" 

sorties:

Printing args 
first 
second 
third fourth 
Printing second args 
first 
second 
third fourth 

Si quelqu'un veut expliquer le problème avec les autres choses que j'essayé, s'il vous plaît fais, car je suis toujours intéressé!

+0

Correspondant à mes centres d'intérêt. Merci pour l'aide en tout cas! – Katerberg

+0

Voir http://unix.stackexchange.com/questions/41357/what-is-the-most-correct-way-to-pass-an-array-to-a-function pour le raisonnement pourquoi. –