我正在尝试做一些相当简单的事情,但我只是做不到。这是我正在尝试使用的示例变量:
20,80,443,53
该变量只是用逗号分隔的一串端口。我需要将它们放入一个数组中。
设置IFS
并,
使用带有 here-string 的 read 命令
IFS=, read -r -a arr <<<"20,80,443,53"
printf "%s\n" "${arr[@]}"
20
80
443
53
这是一种方法:
#!/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]}
var="20,80,442,53"
IFS=, read -ra ary <<< "$var"
printf "%s\n" "${ary[@]}"
20
80
442
53
Ports=('20','80','443','53');
for e in "${lic4l[@]}"; do
echo $e
我希望这会有所帮助并打印给定变量中的端口。
使用 SED,它变成了单行:
a=($(sed 's/,/ /g' <<< "20,80,443,53"))
printf "%s\n" "${a[@]}"
20
80
443
53