Estou olhando para o código exibido abaixo e ele verifica a entrada se os argumentos de linha / coluna começam com -r
ou -c
. O que ${1:0:2}
significa neste contexto?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
user165213
fonte
fonte
bash
.getopt
ougetopts
facilitar sua vida (ou a vida de quem fez isso).Respostas:
É um padrão de shell de Substring Expansion (subclasse de Parameter Expansion).
O formato é:
e a indexação começa em 0.
Digamos que você tenha uma variável e
foo
, em seguida,${foo:0:2}
produz os dois primeiros caracteres (da posição 0 aos próximos 2).Exemplo:
No seu caso, o primeiro número
1
,, refere-se ao nome da variável$1
, que é o primeiro argumento transmitido via linha de comando (no programa principal) ou o primeiro argumento transmitido para a função.Então, no seu caso,
"${1:0:2}"
irá:comece a extrair a substring a partir do índice 0, ou seja, primeiro caractere
e continue até os próximos dois caracteres
portanto, após a operação, você obterá os dois primeiros caracteres (indexados em 0 e 1) da string de entrada.
O
[ "${1:0:2}" != $rowArgName ]
e[ "${1:0:2}" != $colArgName ]
está verificando se a subtração de saída é igual a algumas outras strings.fonte
-c
ou-r
, o que provavelmente melhor têm sido implementadas comgetopts
Um pequeno extrato de
man bash
:fonte
Essa é uma extração simples de substring de uma variável. A variável em questão é o primeiro parâmetro para o script (que é
1
).Se eu tiver uma variável, FOO, posso ver os dois primeiros caracteres do seu valor com
${FOO:0:2}
. O mesmo está sendo feito no seu exemplo com o primeiro argumento.fonte