我有一个解析命令的脚本:
while read line; do
# The third token is either IP or protocol name with '['
token=`echo $line | awk '{print $3}'`
last_char_idx=$((${#token}-1))
last_char=${token:$last_char_idx:1}
# Case 1: It is the protocol name
if [[ "$last_char" = "[" ]]; then
# This is a protocol. Therefore, port is token 4
port=`echo $line | awk '{print $4}'`
# Shave off the last character
port=${port::-1}
else
# token is ip:port. Awk out the port
port=`echo $token | awk -F: '{print $2}'`
fi
PORTS+=("$port")
done < <($COMMAND | egrep "^TCP open")
for p in "${PORTS[@]}"; do
echo -n "$p, "
done
这将打印出如下端口:
80,443,8080,
问题是斜杠,
如何获取最后一个port
,使其在输出中没有尾随的,
?
谢谢
答案 0 :(得分:3)
protected void change(object sender, EventArgs ea)
{
if (track.Text == "Track")
{
track.Text = "Track";
}
else
{
track.Text = "Stop";
}
}
使用${array[*]}
中的第一个字符连接元素。
IFS
如果您不想更改IFS,则可以使用:
IFS=,
echo "${PORTS[*]}"
...或者,从suggestion by Stefan Hamcke简化为:
printf -v ports_str '%s,' "${PORTS[@]}"
echo "${ports_str%,}"
...如果您不希望在最后一个端口之后插入换行符,请将printf '%s' "${PORTS[0]}"; printf ',%s' "${PORTS[@]:1}"
更改为echo
。 (不推荐使用printf '%s' "${ports_str%,}"
;请参见the POSIX spec for echo
的应用程序使用中的讨论)。
答案 1 :(得分:1)
怎么样
$ echo "${ports[@]}" | tr ' ' ','
答案 2 :(得分:0)
为什么不简单:
echo -n