gpt4 book ai didi

bash - 将输出重定向到 bash 数组

转载 作者:行者123 更新时间:2023-11-29 08:45:22 25 4
gpt4 key购买 nike

我有一个包含字符串的文件

ipAddress=10.78.90.137;10.78.90.149

我想将这两个 IP 地址放在一个 bash 数组中。为此,我尝试了以下方法:

n=$(grep -i ipaddress /opt/ipfile |  cut -d'=' -f2 | tr ';' ' ')

这会导致正确提取值,但由于某种原因,数组的大小返回为 1,我注意到这两个值都被标识为数组中的第一个元素。也就是

echo ${n[0]}

返回

10.78.90.137 10.78.90.149

我该如何解决这个问题?

感谢您的帮助!

最佳答案

你真的需要一个数组吗

庆典

$ 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 $@ #this is "array"

如果要放入数组

$ a=( $@ )
$ echo ${a[0]}
10.78.90.137
$ echo ${a[1]}
10.78.90.149

@OP,关于你的方法:将你的 IFS 设置为空格

$ 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

还有,不需要用那么多工具。你可以只使用 awk,或者简单地使用 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[@]}

输出

$ 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

呆呆的

$ 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

关于bash - 将输出重定向到 bash 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com