2010-10-27 6 views
1

Compte tenu de la variable chaîne suivantePassez une chaîne avec des espaces comme argument à la fonction Bash

VAR="foo   bar" 

J'ai besoin d'être passé à une fonction bash, et les accès, comme d'habitude, par l'intermédiaire $1. Jusqu'à présent, je ne l'ai pas été en mesure de comprendre comment le faire:

#!/bin/bash 
function testfn(){ 
    echo "in function: $1" 
} 
VAR="foo   bar" 
echo "desired output is:" 
echo "$(testfn 'foo   bar')" 
echo "Now, what about a version with \$VAR?" 
echo "Note, by the way, that the following doesn't do the right thing:" 
echo $(testfn "foo   bar") #prints: "in function: foo bar" 

Répondre

2

Bash est intelligent et des paires de guillemets doubles correspondent soit à l'intérieur ou à l'extérieur d'une structure $(...). Par conséquent, echo "$(testfn "foo bar")" est valide et le résultat de votre fonction testfn ne sera considéré comme un seul argument que pour la commande interne echo.

+1

Tout droit. Je supposais que les doubles guillemets imbriqués ne devraient jamais être utilisés. Cependant, 'echo" (testfn "$ VAR") "' fonctionne très bien. –

Questions connexes