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

UNIX/Bash脚本实现3个输入姓名按字母序排序及现有代码报错修复

问题排查与解决方案

现有代码问题排查

  • 顶层两个if判断为独立关系,没有做互斥处理,会出现无输出或同时输出两次排序结果的问题:比如输入第一个名字为Zoe时,n1字符串序大于n2和n3,两个顶层if的条件都不满足,没有任何输出;如果两个顶层if条件同时成立,会连续输出两次结果,导致内容混乱。
  • 分支逻辑覆盖不全,三个名字排序共有6种排列组合,现有嵌套判断没有覆盖所有场景,部分输入无法得到正确结果。

正确实现方案

方案1:极简实现(借助sort命令,无需复杂判断)

代码量少、出错概率低,适合实际生产场景使用:

#!/bin/bash
names=()
# 循环读取3个输入存入数组
for i in {1..3}; do
    read -p "Enter a friend's name: " name
    names+=("$name")
done
# 按字母序排序后空格分隔输出
printf "%s\n" "${names[@]}" | sort | tr '\n' ' '
echo

方案2:修正嵌套判断逻辑

如果必须用条件判断实现,可以将顶层分支改为互斥逻辑,覆盖所有排列场景:

#!/bin/bash
echo -n "Enter a friend's name: "
read n1
echo -n "Enter another friend's name: "
read n2
echo -n "Enter a third friend's name: "
read n3

if [[ $n1 < $n2 && $n1 < $n3 ]]; then
    # n1为最小值
    if [[ $n2 < $n3 ]]; then
        echo "$n1 $n2 $n3"
    else
        echo "$n1 $n3 $n2"
    fi
elif [[ $n2 < $n1 && $n2 < $n3 ]]; then
    # n2为最小值
    if [[ $n1 < $n3 ]]; then
        echo "$n2 $n1 $n3"
    else
        echo "$n2 $n3 $n1"
    fi
else
    # n3为最小值
    if [[ $n1 < $n2 ]]; then
        echo "$n3 $n1 $n2"
    else
        echo "$n3 $n2 $n1"
    fi
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:09