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

Shell脚本中如何正确使用cut命令从字符串获取预期输出?

问题根源

原来的for i in $list没有用引号包裹$list,Bash会默认按空格、换行、制表符拆分字符串,导致"do not target"被拆成多个独立的循环项,最终输出零散的单词。

解决方法

方法1:临时修改IFS,只按换行分割循环项

通过修改环境变量IFS(内部字段分隔符)为换行符,让循环仅按行处理列表中的每一项,避免空格拆分:

#!/bin/bash
list="john,do not target
martin,unknown"

# 临时设置IFS为换行,仅按行分割
IFS=$'\n'
for i in $list; do
    # 用cut提取逗号后的字段,注意echo要加引号保留空格
    value=$(echo "$i" | cut -f2 -d',')
    echo "$value"
done
# 恢复默认IFS(可选,养成良好习惯)
unset IFS

方法2:用while read直接拆分字段(更高效)

利用read命令结合IFS=,,直接将每行按逗号拆分成name和value,无需额外调用cut:

#!/bin/bash
list="john,do not target
martin,unknown"

echo "$list" | while IFS=, read -r name value; do
    echo "$value"
done

-r选项用于避免read解析转义字符,保证原始字符串的完整性。

方法3:用awk一键处理

借助awk指定逗号为分隔符,直接打印每行的第二个字段,代码更简洁:

#!/bin/bash
list="john,do not target
martin,unknown"

echo "$list" | awk -F',' '{print $2}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:29