Je regarde le code affiché ci-dessous et il vérifie l'entrée si les arguments de ligne / colonne commencent par soit -r
ou -c
. Que ${1:0:2}
signifie dans ce contexte?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
user165213
la source
la source
bash
.getopt
ougetopts
vous faciliter la vie (ou la vie de celui qui a fait cela).Réponses:
Il s'agit d'un modèle de shell Substring Expansion (sous-classe de Parameter Expansion).
Le format est:
et l'indexation commence à 0.
Disons que vous avez une variable
foo
, puis${foo:0:2}
donne les deux premiers caractères (de la position 0 aux 2 suivants).Exemple:
Dans votre cas, le premier nombre,
1
fait référence au nom de la variable$1
, qui est le premier argument passé via la ligne de commande (dans le programme principal) ou le premier argument passé à la fonction.Donc dans votre cas
"${1:0:2}"
:commencer à extraire la sous-chaîne à partir de l'index 0, c'est-à-dire le premier caractère
et continuez jusqu'aux deux personnages suivants
Ainsi, après l'opération, vous obtiendrez les deux premiers caractères (indexés à 0 et 1) de la chaîne d'entrée.
Les
[ "${1:0:2}" != $rowArgName ]
et[ "${1:0:2}" != $colArgName ]
vérifient si la sous-chaîne de sortie est égale à certaines autres chaînes.la source
-c
ou-r
, ce qui a probablement été mieux implémenté avecgetopts
Un petit extrait de
man bash
:la source
Il s'agit d'une extraction de sous-chaîne simple à partir d'une variable. La variable en question est le premier paramètre du script (qui est
1
).Si j'ai une variable, FOO, je peux voir les deux premiers caractères de sa valeur avec
${FOO:0:2}
. La même chose se fait dans votre exemple avec le premier argument.la source