Masalah
Saya mencoba mengekstrak level sinyal untuk wifi dengan cara berikut, dalam skrip bash (kutipan tampaknya tidak membuat perbedaan):
string="$(iwconfig wlan0 | grep -I Signal)"
Jika saya echo $string
, saya mendapatkan apa yang saya harapkan:
Link Quality=63/70 Signal level=-47dBm
Tetapi jika saya mencoba untuk mendapatkan substring echo ${string:5}
,, ia mengembalikan hal yang sama.
Debuging:
Jika saya menempelkan output wconfig wlan0 | grep -I Signal
langsung ke variabel: string="Link Quality=63/70 Signal level=-47dBm"
maka semuanya berfungsi seperti yang diharapkan.
echo $string
# Link Quality=63/70 Signal level=-47dBm
echo ${string:5}
# Quality=63/70 Signal level=-47dBm
Pertanyaan: Menurut internet, semua variabel bash disimpan sebagai string karakter. Jadi, hasil debug seharusnya sama dengan masalah asli saya. Apakah ada alasan mengapa itu tidak diuraikan sebagai teks dalam masalah asli?
sumber
Ini bekerja pada mesin saya:
wlp60s0
denganwlan0
.42
dandBm
. Karena itucut
perintah ini diperintahkan untuk mencetak bidang # 4 dan # 5. Dalam pertanyaan Anda tidak ada ruang jadi saya tidak yakin versi apa yang Anda gunakan.Anda juga bisa menggunakan:
cut
ini disuruh menggunakan=
sebagai pembatas lapangan.Jika Anda ingin menggunakan
${string...}
sintaks yang benar adalah:Metode mana pun akan bekerja untuk mengambil substring setelah yang terakhir
=
. Metode asli5
dalam pertanyaan Anda, saya tidak mengerti bagaimana cara kerjanya.sumber