Je me demandais simplement: avez-vous pris la peine de mettre un echo ${#1}avant cette déclaration pour voir quelle est la valeur? Si oui, vous devriez généralement inclure ce que vous avez trouvé dans cette recherche dans la question, et peut-être une explication de la raison pour laquelle cela n'a pas aidé.
jpmc26
Réponses:
24
${#1}est la longueur (en nombre de caractères) $1qui est le premier argument de la fonction.
Il en (( ${#1} == 0 ))va de même pour tester de façon alourdie si le premier argument est vide (ou non défini, les paramètres non définis apparaissent comme vides lorsqu'ils sont développés) ou non.
Pour tester un paramètre vide, la méthode canonique est:
[-z "$1"]
Mais là, plus probablement, l'intention était de vérifier si un argument était fourni à la fonction, auquel cas la syntaxe serait:
Dans les deux cas cependant, les obus de type Bourne ont des raccourcis pour cela:
test=${1:--}# set test to $1, or "-" if $1 is empty or not provided
test=${1--}# set test to $1, or "-" if $1 is not provided
Maintenant, si l'intention est de transmettre cela à catou à un autre utilitaire de texte afin que -(signifiant stdin) soit passé quand aucun argument n'est fourni, alors vous n'aurez peut-être pas besoin de tout cela.
Au lieu de:
getlable(){
test=${1--}
cat --"$test"}
Faites juste:
getlable(){
cat --"$@"}
La liste des arguments de la fonction sera transmise telle quelle cat. S'il n'y a pas d'argument, il catne recevra aucun argument (puis lira à partir de stdin comme s'il s'agissait d'un seul -argument). Et s'il y a un ou plusieurs arguments, ils seront tous transmis tels quels cat.
echo ${#1}
avant cette déclaration pour voir quelle est la valeur? Si oui, vous devriez généralement inclure ce que vous avez trouvé dans cette recherche dans la question, et peut-être une explication de la raison pour laquelle cela n'a pas aidé.Réponses:
${#1}
est la longueur (en nombre de caractères)$1
qui est le premier argument de la fonction.Il en
(( ${#1} == 0 ))
va de même pour tester de façon alourdie si le premier argument est vide (ou non défini, les paramètres non définis apparaissent comme vides lorsqu'ils sont développés) ou non.Pour tester un paramètre vide, la méthode canonique est:
Mais là, plus probablement, l'intention était de vérifier si un argument était fourni à la fonction, auquel cas la syntaxe serait:
(ou
(($# == 0))
si vous voulez rendre votre script spécifique à ksh / bash / zsh).Dans les deux cas cependant, les obus de type Bourne ont des raccourcis pour cela:
Maintenant, si l'intention est de transmettre cela à
cat
ou à un autre utilitaire de texte afin que-
(signifiant stdin) soit passé quand aucun argument n'est fourni, alors vous n'aurez peut-être pas besoin de tout cela.Au lieu de:
Faites juste:
La liste des arguments de la fonction sera transmise telle quelle
cat
. S'il n'y a pas d'argument, ilcat
ne recevra aucun argument (puis lira à partir de stdin comme s'il s'agissait d'un seul-
argument). Et s'il y a un ou plusieurs arguments, ils seront tous transmis tels quelscat
.la source
${#1}
est la longueur du premier paramètre positionnel.Dans un shell en cours d'exécution, vous pouvez utiliser
pour les définir.
la source