3

我正在尝试做一些相当简单的事情,但我只是做不到。这是我正在尝试使用的示例变量:

20,80,443,53

该变量只是用逗号分隔的一串端口。我需要将它们放入一个数组中。

4

5 回答 5

7

设置IFS,使用带有 here-string 的 read 命令

IFS=, read -r -a arr <<<"20,80,443,53"
printf "%s\n" "${arr[@]}"

20
80
443
53
于 2013-06-26T20:28:15.820 回答
2

这是一种方法:

#!/bin/bash
v="20,80,443,53"
IFS=, a=($v) # Split
echo ${a[0]} # Display
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}

更新

感谢 gniourf_gniourf 指出 IFS 因分配而被修改。这是我的古怪工作。现在我明白为什么其他人的做法不同了。

v="20,80,443,53"

PREV_IFS="$IFS" # Save previous IFS
IFS=, a=($v)
IFS="$PREV_IFS" # Restore IFS

echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}
于 2013-06-26T20:29:26.567 回答
1
var="20,80,442,53"
IFS=, read -ra ary <<< "$var"
printf "%s\n" "${ary[@]}"
20
80
442
53
于 2013-06-26T20:27:55.717 回答
0
Ports=('20','80','443','53');

for e in "${lic4l[@]}"; do
    echo $e

我希望这会有所帮助并打印给定变量中的端口。

于 2013-06-26T20:30:12.407 回答
0

使用 SED,它变成了单行:

a=($(sed 's/,/ /g' <<< "20,80,443,53"))

printf "%s\n" "${a[@]}"
20
80
443
53
于 2017-03-13T16:41:48.767 回答