Problema
Traté de extraer el nivel de señal para wifi de la siguiente manera, en un script bash (las citas parecen no hacer ninguna diferencia):
string="$(iwconfig wlan0 | grep -I Signal)"
Si yo echo $string
, obtengo lo que espero:
Link Quality=63/70 Signal level=-47dBm
Pero si trato de obtener una subcadena, echo ${string:5}
devuelve lo mismo.
Depuración:
Si pego el resultado de wconfig wlan0 | grep -I Signal
directamente en la variable: string="Link Quality=63/70 Signal level=-47dBm"
entonces todo funciona como se esperaba.
echo $string
# Link Quality=63/70 Signal level=-47dBm
echo ${string:5}
# Quality=63/70 Signal level=-47dBm
Pregunta: Según Internet, todas las variables bash se almacenan como cadenas de caracteres. Por lo tanto, el resultado de la depuración debería haber sido el mismo que mi problema original. ¿Hay alguna razón por la que no se analiza como texto en el problema original?
fuente
Esto funciona en mi máquina:
wlp60s0
conwlan0
.42
ydBm
. Como tal, elcut
comando tiene instrucciones de imprimir los campos # 4 y # 5. En su pregunta no hay espacio, así que no estoy seguro de qué versión está utilizando.También puedes usar:
cut
se le dice que lo use=
como delimitador de campo.Si desea usar,
${string...}
aunque la sintaxis correcta es:Cualquiera de los métodos funcionará para tomar la subcadena después de la última
=
. El método original de5
en su pregunta no entiendo cómo puede funcionar.fuente