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

Shell脚本中如何将单行多IP输入转换为多行使用?

嘿,这个需求挺常见的,我给你几个实用的Shell技巧来实现,都是日常脚本里常用的方法:

方法1:用tr命令快速替换空格为换行

这是最直接的方式,把变量里的空格换成换行符就行:

export Master="$1 $2 $3"
# 转换并输出每行一个IP
echo "$Master" | tr ' ' '\n'

要是担心有连续空格(虽然你的场景里不会出现),可以加-s参数压缩重复空格,避免产生空行:echo "$Master" | tr -s ' ' '\n'

方法2:用printf格式化输出(推荐)

printf天生适合处理这种分隔的参数,写法简洁又可靠:

export Master="$1 $2 $3"
# 自动拆分空格分隔的IP,逐个换行输出
printf "%s\n" $Master

这里注意不要给$Master加引号,这样Shell会自动把它按空格拆成单独的IP,printf会依次把每个IP代入%s并换行。

方法3:用for循环遍历,方便后续扩展

如果之后你想对每个IP做额外操作(比如ping检查、执行脚本),用循环就更灵活了:

export Master="$1 $2 $3"
# 遍历每个IP,逐行打印
for ip in $Master; do
    echo "$ip"
    # 这里可以加其他逻辑,比如: ping -c 1 "$ip"
done

方法4:用awk处理字段拆分

awk处理文本字段的能力很强,也能轻松搞定:

export Master="$1 $2 $3"
echo "$Master" | awk '{for(i=1;i<=NF;i++) print $i}'

NF代表当前行的字段总数(也就是IP的个数),循环打印每个字段就得到了每行一个IP的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:00