passer une variable vide dans bash
mon problème:
#!/bin/bash
function testFunc(){
echo "param #1 is :" $1
echo "param #2 is :" $2
}
param1="param1"
param2="param2"
testFunc $param1 $param2
De cette façon, la sortie est :
param #1 is : param1
param #2 is : param2
Mais quand j'ai mis param1 à la chaîne vide:
param1=""
Alors la sortie est de la mise en jachère:
param #1 is : param2
param #2 is :
Je suppose que le problème est que lorsque le premier paramètre est vide, ce n'est pas déclarée, il ne fait pas se passer comme paramètre d'une fonction.
Si c'est le problème, est-il possible de déclarer une variable "chaîne vide" dans bash, ou est-il une solution de contournement pour obtenir le comportement attendu?
Remarque: Il fonctionne comme prévu si j'ai appeler la fonction comme ceci:
testFunct "" $param2
Mais je veux avoir un code propre.
Mise à JOUR:
J'ai récemment découvert le -u qui soulève une erreur dans le cas d'un unbound variable est sur le point d'être utilisé.
$ bash -u test.sh
param #1 is : param1
test.sh: line 5: $2: unbound variable
source d'informationauteur kupsef
Vous devez vous connecter pour publier un commentaire.
Le premier cas vous l'appeler le script avec
testFunct param2
. Par conséquent, il comprendparam2
en tant que premier paramètre.Il est toujours conseillé de passer des paramètres à l'intérieur des guillemets pour éviter cela (et pour être honnête, pour moi, c'est plus propre de cette façon). De sorte que vous pouvez l'appeler
À passer une variable vide vous dire:
Voir un exemple:
Compte tenu de cette fonction:
Appelons cela de différentes manières:
Une autre bonne pratique consiste à vérifier le nombre de paramètres passés à l'aide de $#.
Toutefois, cela ne résout pas le problème d'un paramètre vide, comment voulez-vous savoir si le param1 est vide ou param2 est vide. Par conséquent, les deux contrôles sont bons parctices.