web-dev-qa-db-fra.com

Comment faire écho à une variable contenant un signe dollar non échappé dans bash

Si j'ai une variable contenant un signe dollar non échappé, puis-je faire écho à tout le contenu de la variable?

Par exemple, quelque chose appelle un script:

./script.sh "test1$test2"

et puis si je veux utiliser le paramètre, il devient "tronqué" comme ceci:

echo ${1}
test1

Bien sûr, le fait de ne citer que le nom en question n’aide en rien. Je n'arrive pas à comprendre comment le citer pour au moins échapper moi-même au signe dollar une fois que le script a reçu le paramètre.

17
Not22

La variable est remplacée avant l'exécution du script.

./script.sh 'test1$test2'
7

Le problème est que le script reçoit "test1" en premier lieu et qu'il ne peut pas savoir s'il y avait une référence à une variable vide (non déclarée). Vous devez échapper le $ avant de le transmettre au script, comme ceci:

./script.sh "test1\$test2"

Ou utilisez des guillemets simples ' comme ceci:

./script.sh 'test1$test2'

Dans ce cas, bash ne développera pas les variables à partir de cette chaîne de paramètres.

29
user405725

en utilisant des guillemets simples, les méta-caractères tels que $ conserveront sa valeur littérale. Si des guillemets doubles sont utilisés, les noms de variables seront interpolés.

4
ghostdog74

Comme Ignacio vous l'a dit, la variable est remplacée. Vos scripts reçoivent donc ./script.sh test1 sous la forme de valeurs pour $0 et $1.

Mais même dans le cas où vous aviez utilisé des guillemets littéraux pour passer l'argument, vous devriez toujours citer "$1" dans votre echo "${1}". C'est une bonne pratique.

0
Benoit