2010-08-25 3 views
1

est-il posible pour imprimer la valeur NUM (100), alors que je dois utiliser uniquement ' et non "ksh + argument PARAM

# NUM=100 
# PARAM='some text $NUM' 
# echo $PARAM 
    some text $value 

droite Imprimer

some text 100 
+1

Pourquoi devez-vous utiliser uniquement des guillemets simples? La substitution de variable ne fonctionne pas entre guillemets simples. –

Répondre

0

extrêmement dangereux, mais : eval echo $PARAM

Je vous déconseille fortement ceci: et si param contient une commande destructive dans les backticks? Réfléchissez à votre conception ou repensez votre langage d'implémentation.

Vous pouvez au moins échapper et $() constructions contre-apostrophes première:

NUM=100 
PARAM='this is $NUM -- `rm foo` -- $(rm bar)' 
param_safer=$(echo "$PARAM" | sed 's/`/\\`/g; s/\$(\([^)]\+\))/\\$\\(\1\\)/g') 
eval echo "$param_safer" 

sorties: this is 100 -- `rm foo` -- $(rm bar)

1

Utilisez à double citations à la place de unique citations comme des guillemets simples ne permettent pas d'interpolation variable:

NUM=100 
PARAM="some text $NUM" 
echo $PARAM 

EDIT: Depuis que je ne suis pas autorisé à utiliser des guillemets doubles, vous pouvez utiliser concaténation comme:

NUM=100 
PARAM='some text '$NUM 
echo $PARAM 
+0

mais la question principale était sur le point d'utiliser des guillemets simples Je ne peux pas utiliser ", – lidia

+0

@lidia: jetez un oeil à ma réponse éditée – codaddict

+0

Je regarde mais le NUM doit être au milieu ce n'est pas bon pour moi – lidia