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 Signaldirectamente 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:
wlp60s0conwlan0.42ydBm. Como tal, elcutcomando 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:
cutse 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 de5en su pregunta no entiendo cómo puede funcionar.fuente