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.
La variable est remplacée avant l'exécution du script.
./script.sh 'test1$test2'
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.
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.
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.