从bash输出中删除结尾的`,`

时间:2018-12-19 21:21:55

标签: bash

我有一个解析命令的脚本:

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,使其在输出中没有尾随的,

谢谢

3 个答案:

答案 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