Comment vérifiez-vous si $*
est vide? En d'autres termes, comment vérifier si aucun argument n'a été fourni à une commande?
Comment vérifiez-vous si $*
est vide? En d'autres termes, comment vérifier si aucun argument n'a été fourni à une commande?
Réponses:
Pour vérifier si aucun argument n'a été fourni à la commande, vérifiez la valeur de $#
variable alors,
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
Si vous voulez utiliser $*
( pas préférable ) alors,
if [ "$*" == "" ]; then
echo "No arguments provided"
exit 1
fi
Quelques explications:
La seconde approche n’est pas préférable car, dans les paramètres de position, l’extension se *
développe en partant des paramètres de position. Lorsque le développement se produit entre guillemets doubles, il se développe en un seul mot avec la valeur de chaque paramètre séparée par le premier caractère de la variable spéciale IFS. Cela signifie qu'une chaîne est construite. Donc, il y a des frais généraux supplémentaires.
D'autre part se #
développe au nombre de paramètres de position.
Exemple:
$ command param1 param2
Ici,
La valeur de $#
est 2 et la $*
chaîne de caractères "param1 param2" (sans les guillemets), si IFS n'est pas défini. Parce que si IFS n'est pas défini, les paramètres sont séparés par des espaces
Pour plus de détails man bash
et lire la rubrique intitulée Paramètres spéciaux
[ $# -eq 0 ]
est la forme la plus courante de l'IME. Il existe des cas limites où il "$#"
peut être vide: s'il existe un seul argument vide ou s'il y a plusieurs arguments vides et s'il $IFS
est vide.
"$*"
expression sera également évaluée ""
si un seul ""
paramètre a été passé. Mais la plupart du temps, vous ne vous en soucierez probablement pas.
bash
. Vous utilisez sh
pour exécuter le script. Autant que je sache ==
est valable uniquement en bash
.
Si vous ne voulez perdre que si un argument particulier est manquant, la substitution de paramètre est excellente:
#!/bin/bash
# usage-message.sh
: ${1?"Usage: $0 ARGUMENT"}
# Script exits here if command-line parameter absent,
#+ with following error message.
# usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
c'est l'une des façons dont vous pouvez savoir que vous n'avez aucun argument
NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
{do something}
fi
if ! (($#)); ...
, ouif (($# == 0)); ...
, ouif [ $# -eq 0 ]; ...
, ou! (($#)) && ...
, ou(($#)) || ...