Giriş
Genellikle bir komutun çıktısını bir satır dizisi olarak okumak için kullanılır.
Neden Lazım
Örnek
Elimizde şöyle bir bash döngüsü olsun
-t seçeneği
Sondaki newline karakterini siler.
Örnek
Dosyadaki tüm satırları okumak için şöyle yaparız. readAllLines() gibidir.
Bir komutun çıktısını okumak için şöyle yaparız. arr isimli değişkene okur.
Şöyle yaparız
Bir komutun çıktısını okumak için şöyle yaparız
Genellikle bir komutun çıktısını bir satır dizisi olarak okumak için kullanılır.
Neden Lazım
Örnek
Elimizde şöyle bir bash döngüsü olsun
for i in ${usbs[@]}; do
echo $i
done
bash komut çıktısındanki boşlukları hesaba katarak her kelimeyi teker teker verir. readarray komutu ile tüm satırı okumak mümkün.-t seçeneği
Sondaki newline karakterini siler.
Örnek
Dosyadaki tüm satırları okumak için şöyle yaparız. readAllLines() gibidir.
readarray -t dirs < subdirs2search.txt
find "${dirs[@]}" ...
ÖrnekBir komutun çıktısını okumak için şöyle yaparız. arr isimli değişkene okur.
$ str='25 results [22 valid, 2 invalid, 1 undefined]'
$ readarray -t arr < <( grep -E -o '[0-9]+' <<<"$str" )
Daha sonra göstermek için şöyle yaparız.$ printf 'value: %s\n' "${arr[@]}"
value: 25
value: 22
value: 2
value: 1
ÖrnekŞöyle yaparız
readarray -t usbs < <(lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb)
Komutun çıktısı olarak usbs değişkeni şu değeri alırusbs=(
'sdb usb Kingston DataTraveler 2.0'
'sdc usb Kingston DT 101 G2'
)
ÖrnekBir komutun çıktısını okumak için şöyle yaparız
#!/bin/bash
readarray -t array< <(sed 's/"//g; s/ *//g; s/,/"/; s/,//g; s/"/,/' "$1")
for element in "${array[@]}";do
echo "|ELEMENT|$element|"
done
Array içindeki double quote,space karakterlerini silmek için şöyle yaparız.#!/bin/bash
readarray -t array< "$1"
array=( "${array[@]// /}" ) space sil
array=( "${array[@]//\"/}" ) double quote sil
array=( "${array[@]/,/\"}" )
array=( "${array[@]//,/}" )
array=( "${array[@]/\"/,}" )
for element in "${array[@]}"; do
echo "|ELEMENT|$element|"
done
Hiç yorum yok:
Yorum Gönder