проблема
Я попытался извлечь уровень сигнала для Wi-Fi следующим образом, в сценарии bash (кавычки, кажется, не имеют значения):
string="$(iwconfig wlan0 | grep -I Signal)"
Если я echo $string
, я получаю то, что ожидаю:
Link Quality=63/70 Signal level=-47dBm
Но если я пытаюсь получить подстроку echo ${string:5}
, она возвращает то же самое.
отладки:
Если я вставлю вывод wconfig wlan0 | grep -I Signal
непосредственно в переменную: string="Link Quality=63/70 Signal level=-47dBm"
тогда все будет работать как положено.
echo $string
# Link Quality=63/70 Signal level=-47dBm
echo ${string:5}
# Quality=63/70 Signal level=-47dBm
Вопрос: Согласно Интернету, все переменные bash хранятся в виде символьных строк. Таким образом, результат отладки должен был быть таким же, как моя первоначальная проблема. Есть ли какая-то причина, по которой он не анализируется как текст в исходной задаче?
источник
Это работает на моей машине:
wlp60s0
наwlan0
.42
иdBm
. Как таковаяcut
команда получает команду на печать полей № 4 и № 5. В вашем вопросе нет места, поэтому я не уверен, какую версию вы используете.Вы также можете использовать:
cut
рекомендуется использовать в=
качестве разделителя полей.Если вы хотите использовать,
${string...}
хотя правильный синтаксис:Любой метод будет работать, чтобы взять подстроку после последней
=
. Оригинальный метод5
в вашем вопросе я не понимаю, как это может работать.источник