bạn có thực sự cần một mảng
bash
$ ipAddress="10.78.90.137;10.78.90.149"
$ IFS=";"
$ set -- $ipAddress
$ echo $1
10.78.90.137
$ echo $2
10.78.90.149
$ unset IFS
$ echo [email protected] #this is "array"
nếu bạn muốn kiến để đưa vào mảng
$ a=([email protected])
$ echo ${a[0]}
10.78.90.137
$ echo ${a[1]}
10.78.90.149
@OP, liên quan đến phương pháp của bạn: set IFS của bạn đến một không gian
$ IFS=" "
$ n=($(grep -i ipaddress file | cut -d'=' -f2 | tr ';' ' ' | sed 's/"//g'))
$ echo ${n[1]}
10.78.90.149
$ echo ${n[0]}
10.78.90.137
$ unset IFS
Ngoài ra, không có nhu cầu sử dụng rất nhiều công cụ. bạn chỉ có thể sử dụng awk, hoặc chỉ đơn giản là bash shell
#!/bin/bash
declare -a arr
while IFS="=" read -r caption addresses
do
case "$caption" in
ipAddress*)
addresses=${addresses//[\"]/}
arr=(${arr[@]} ${addresses//;/ })
esac
done < "file"
echo ${arr[@]}
đầu ra
$ more file
foo
bar
ipAddress="10.78.91.138;10.78.90.150;10.77.1.101"
foo1
ipAddress="10.78.90.137;10.78.90.149"
bar1
$./shell.sh
10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
trố mắt
$ n=($(gawk -F"=" '/ipAddress/{gsub(/\"/,"",$2);gsub(/;/," ",$2) ;printf $2" "}' file))
$ echo ${n[@]}
10.78.91.138 10.78.90.150 10.77.1.101 10.78.90.137 10.78.90.149
Các giá trị được sử dụng sau này trong tập lệnh. Nếu chúng được lưu trữ trong một mảng nó sẽ làm cho nó dễ dàng hơn để lặp lại và thực hiện các hoạt động khác trên chúng, do đó cần phải lưu trữ chúng trong một mảng. Phương pháp bạn mô tả sẽ giúp tôi. Cảm ơn! Bạn có thể chia sẻ suy nghĩ của bạn về lý do tại sao phương pháp tôi đang sử dụng không thành công? – calvinkrishy
xem chỉnh sửa của tôi. một cách là đặt IFS. – ghostdog74
Cảm ơn. Đã học một vài thủ thuật mới ngay hôm nay! – calvinkrishy