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

Bash脚本实现两列数值比较及结果输出需求求助

解决Bash中比较$SIZE_TO_SOCKET变量中A和B数值的问题

我来帮你补全并优化这段Bash代码,刚好能实现你要的功能。首先得明确$SIZE_TO_SOCKET的格式——你说示例输出是A 256 B 256,可能是一行包含两组键值对,也可能是每行一组(比如A 256和B 256各占一行),我两种情况都给你处理方案:

情况1:$SIZE_TO_SOCKET是每行一组键值对(更通用的场景)

这种情况适合变量里有多行数据,我们用循环遍历每行提取值:

# 先初始化存储A、B数值的变量
SOCKET_A=""
SOCKET_B=""

# 遍历$SIZE_TO_SOCKET的每一行
while IFS= read -r line; do
    # 用awk提取当前行的socket名称和对应数值
    SOCKET=$(echo "$line" | awk '{print $1}')
    SIZE=$(echo "$line" | awk '{print $2}')
    
    # 根据socket名称把数值存入对应变量
    if [[ "$SOCKET" == "A" ]]; then
        SOCKET_A="$SIZE"
    elif [[ "$SOCKET" == "B" ]]; then
        SOCKET_B="$SIZE"
    fi
done <<< "$SIZE_TO_SOCKET"

# 先检查是否A、B的数值都获取到了,避免缺失值导致错误
if [[ -z "$SOCKET_A" || -z "$SOCKET_B" ]]; then
    echo "Error: Missing value for A or B"
    exit 1
fi

# 比较数值并输出结果(用-eq做数值比较,比字符串比较更准确)
if [[ "$SOCKET_A" -eq "$SOCKET_B" ]]; then
    echo "Success: A($SOCKET_A) is equal to B($SOCKET_B)"
else
    echo "Error: A($SOCKET_A) is not equal to B($SOCKET_B)"
fi

情况2:$SIZE_TO_SOCKET是一行包含两组键值对(你的示例场景)

如果变量内容就是一行A 256 B 256,那不用循环,直接提取对应字段更简单:

# 直接提取A和B对应的数值
SOCKET_A=$(echo "$SIZE_TO_SOCKET" | awk '{print $2}')
SOCKET_B=$(echo "$SIZE_TO_SOCKET" | awk '{print $4}')

# 数值比较并输出结果
if [[ "$SOCKET_A" -eq "$SOCKET_B" ]]; then
    echo "Success: A($SOCKET_A) is equal to B($SOCKET_B)"
else
    echo "Error: A($SOCKET_A) is not equal to B($SOCKET_B)"
fi

关键细节说明

  • 用-eq做数值比较:如果用==是字符串比较,比如0256和256字符串不相等,但数值是相等的,所以用-eq更贴合你的需求。
  • 空值检查:在循环方案里加了空值判断,防止$SIZE_TO_SOCKET里缺少A或B的条目导致后续比较出错。
  • IFS= read -r line:IFS=能保留行首或行尾的空格,-r禁止反斜杠转义,确保读取每行内容的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:05