You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中将netcat接收的数据拼接为字符串变量用于邮件发送?

问题描述

我希望通过netcat从指定端口收集数据,将其传递给另一个脚本并通过邮件发送。最初使用xargs管道时,出现了每行数据单独发送的问题。现在我想在连接期间将数据拼接成一个字符串,再传递给邮件发送脚本,但尝试的代码无法实现拼接效果,代码如下:

now = ''
nc -lvp 12345 | $now=$now$1

./ForwardMail.sh $now

请问有人能帮我实现字符串拼接吗?

解决方法

提供两种可靠的实现方式,满足你的字符串拼接需求:

方式一:一次性收集所有输出

直接用命令替换把netcat的全部输出存入变量,适合不需要逐行处理的场景:

# 收集nc的所有输出到变量now
now=$(nc -lvp 12345)
# 传递给邮件脚本,注意加双引号避免空格/特殊字符导致内容拆分
./ForwardMail.sh "$now"

方式二:逐行自定义拼接

如果需要对每行内容做处理后再拼接(比如去掉换行、添加分隔符),可以用read循环:

now=''
# 读取nc的每一行输出,拼接到变量中
while IFS= read -r line; do
    now+="$line"
    # 如需保留换行,改为 now+="$line"$'\n'
    # 如需添加分隔符(比如逗号),改为 now+="$line,"
done < <(nc -lvp 12345)

./ForwardMail.sh "$now"

原代码的问题说明

  • 变量赋值语法错误:now = ''不能有空格,正确写法是now=''
  • 管道使用错误:管道是将前一个命令的输出作为后一个命令的输入,而$now=$now$1不是合法的命令,且$1在此处没有定义,无法获取有效内容。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:11