Problema
Tentei extrair o nível de sinal do wifi da seguinte maneira, em um script bash (as aspas parecem não fazer diferença):
string="$(iwconfig wlan0 | grep -I Signal)"
Se eu echo $string
conseguir o que espero:
Link Quality=63/70 Signal level=-47dBm
Mas se eu tentar obter uma substring echo ${string:5}
, ela retornará a mesma coisa.
Depuração:
Se eu colar a saída wconfig wlan0 | grep -I Signal
diretamente na variável: string="Link Quality=63/70 Signal level=-47dBm"
tudo funcionará conforme o esperado.
echo $string
# Link Quality=63/70 Signal level=-47dBm
echo ${string:5}
# Quality=63/70 Signal level=-47dBm
Pergunta: De acordo com a Internet, todas as variáveis do bash são armazenadas como cadeias de caracteres. Assim, o resultado da depuração deveria ter sido o mesmo que o meu problema original. Existe algum motivo para não ser analisado como texto no problema original?
fonte
Isso funciona na minha máquina:
wlp60s0
porwlan0
.42
edBm
. Como tal, ocut
comando é instruído a imprimir os campos 4 e 5. Na sua pergunta, não há espaço, então não tenho certeza de qual versão você está usando.Você também pode usar:
cut
é dito para usar=
como delimitador de campo.Se você deseja usar,
${string...}
a sintaxe correta é:Qualquer um dos métodos funcionará para obter a substring após o último
=
. O método original da5
sua pergunta não entendo como isso pode funcionar.fonte