Estoy mirando el código que se muestra a continuación y comprueba la entrada si los argumentos de fila / columna comienzan con -r
o -c
. ¿Qué ${1:0:2}
significa en este contexto?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
usuario165213
fuente
fuente
bash
.getopt
ogetopts
hacerte la vida más fácil (o la vida de quien hizo esto).Respuestas:
Es un patrón de shell de expansión de subcadena (subclase de expansión de parámetros).
El formato es:
y la indexación comienza en 0.
Digamos que tiene una variable
foo
, luego${foo:0:2}
produce los dos primeros caracteres (desde la posición 0 a los siguientes 2).Ejemplo:
En su caso, el primer número, se
1
refiere al nombre de la variable$1
, que es el primer argumento pasado a través de la línea de comando (en el programa principal) o el primer argumento pasado a la función.Entonces, en su caso
"${1:0:2}"
:comenzar a extraer la subcadena a partir del índice 0, es decir, el primer carácter
y continuar hasta los próximos dos personajes
así que después de la operación obtendrá los dos primeros caracteres (indexados en 0 y 1) de la cadena de entrada.
El
[ "${1:0:2}" != $rowArgName ]
y[ "${1:0:2}" != $colArgName ]
están comprobando si la subcadena de salida es igual a algunas otras cadenas.fuente
-c
o-r
, lo que probablemente se haya implementado mejorgetopts
Un pequeño extracto de
man bash
:fuente
Esta es una extracción de subcadena simple de una variable. La variable en cuestión es el primer parámetro del script (que es
1
).Si tengo una variable, FOO, puedo ver los dos primeros caracteres de su valor con
${FOO:0:2}
. Lo mismo se está haciendo en su ejemplo con el primer argumento.fuente