Veja Expansão de Substring . O formato é ${string:position:length}
. Considere, por exemplo:
$ x="123456789012345678901234567890"
$ echo ${x:0:0}
$ echo ${x:0:1}
1
$ echo ${x:0:2}
$ echo ${x:0:3}
123
$ echo ${x:1:3}
234
Encontrei o código para obter o status atual do Caps Lock (já que o teclado deste laptop não possui nenhum indicador de LED para ele) de aqui .
#!/bin/bash
v='xset -q | grep Caps'
echo ${v:7:17}
Eu entendo como a primeira parte funciona; está pesquisando o status, em seguida, procurando a string "Caps" e armazenando isso em uma variável. O que eu não entendo é essa linha aqui:
echo ${v:7:17}
Essa linha apenas exibe "Caps Lock: off / on", dependendo do status do Caps Lock. Eu imagino que os números e os dois-pontos são para especificar um intervalo para que as informações estranhas não sejam impressas, mas os números não parecem corresponder aos caracteres sendo impressos de qualquer maneira que eu possa ver. A linha completa que seria impressa é algo como:
00: Caps Lock: off 01: Num Lock: on 02: Scroll Lock: off
O que eu estou perguntando é: o que exatamente é o intervalo especificando? Está dizendo v:start:end
, essencialmente? Eu tentei pesquisar informações sobre o uso de intervalos com echo
, mas não encontrei nada. As páginas do meu sistema nem mencionam esse uso para echo
.
Veja Expansão de Substring . O formato é ${string:position:length}
. Considere, por exemplo:
$ x="123456789012345678901234567890"
$ echo ${x:0:0}
$ echo ${x:0:1}
1
$ echo ${x:0:2}
$ echo ${x:0:3}
123
$ echo ${x:1:3}
234
Não é sobre echo
. É sobre a casca. Se você pesquisar por man bash
usando este comando, por exemplo,
man bash | grep -C5 {
você verá uma descrição como esta
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of the value of parameter starting at the character specified by
offset. If parameter is @, an indexed array subscripted by @ or *, or an associative array name, the results differ as
described below. If length is omitted, expands to the substring of the value of parameter starting at the character spec‐
ified by offset and extending to the end of the value. length and offset are arithmetic expressions (see ARITHMETIC EVAL‐
UATION below).
echo
apenas imprime a substring, mas printf
faria o mesmo.
A descrição completa em man bash
:
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of the value
of parameter starting at the character specified by offset. If
parameter is @, an indexed array subscripted by @ or *, or an asso‐
ciative array name, the results differ as described below. If length
is omitted, expands to the substring of the value of parameter start‐
ing at the character specified by offset and extending to the end of
the value. length and offset are arithmetic expressions (see ARITH‐
METIC EVALUATION below).
If offset evaluates to a number less than zero, the value is used as
an offset in characters from the end of the value of parameter. If
length evaluates to a number less than zero, it is interpreted as an
offset in characters from the end of the value of parameter rather
than a number of characters, and the expansion is the characters
between offset and that result. Note that a negative offset must be
separated from the colon by at least one space to avoid being con‐
fused with the :- expansion.
If parameter is @, the result is length positional parameters begin‐
ning at offset. A negative offset is taken relative to one greater
than the greatest positional parameter, so an offset of -1 evaluates
to the last positional parameter. It is an expansion error if length
evaluates to a number less than zero.
If parameter is an indexed array name subscripted by @ or *, the
result is the length members of the array beginning with ${parame‐
ter[offset]}. A negative offset is taken relative to one greater
than the maximum index of the specified array. It is an expansion
error if length evaluates to a number less than zero.
Substring expansion applied to an associative array produces unde‐
fined results.
Substring indexing is zero-based unless the positional parameters are
used, in which case the indexing starts at 1 by default. If offset
is 0, and the positional parameters are used, $0 is prefixed to the
list.
Tags bash echo shell-script string