【发布时间】:2014-08-28 23:13:15
【问题描述】:
我有这个脚本:
nmapout=`sudo nmap -sP 10.0.0.0/24`
names=`echo "$nmapout" | grep "MAC" | grep -o '(.\+)'`
echo "$names"
现在$names 变量包含用换行符分隔的字符串:
>_
(Netgear)
(Hon Hai Precision Ind. Co.)
(Apple)
我尝试用子串的方式进行数组转换:
names=(${names//\\n/ })
echo "${names[@]}"
但问题是,如果我运行此循环,我无法通过索引(即${names[$i] 等)访问它们
for (( i=0; i<${#names[@]}; i++ ))
do
echo "$i: ${names[$i]"
# do some processing with ${names[$i]}
done
我得到这个输出:
>_
0: (Netgear)
1: (Hon
2: Hai
但我想要的是:
>_
0: (Netgear)
1: (Hon Hai Precision Ind. Co.)
2: (Apple)
我想不出一个好的方法来做到这一点,请注意第二个字符串中有空格。
【问题讨论】:
-
你为什么想要数组?我更喜欢通过循环使用
read。 -
@kan ,其实这是一个大脚本的一小部分,原来的脚本将索引用于其他目的,这就是我要保留数组的原因。
-
相关:如何将 空格分隔 字符串转换为 bash 数组:Reading a delimited string into an array in Bash