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

如何在POSIX Shell中解析作为命令行参数传入的整数

实现方案

你最初的伪代码无法直接运行,是因为POSIX Shell的算术扩展仅支持数值运算,不能直接通过乘法生成重复字符串。以下是100%兼容POSIX标准的实现,无需依赖Bash等扩展Shell的特性:


完整脚本代码

#!/bin/sh

# 校验是否传入参数
if [ $# -eq 0 ]; then
    echo "用法:$0 正整数1 正整数2 ..." >&2
    exit 1
fi

# 第一步:校验所有参数都是正整数,同时计算最大值用于生成分割线
max_num=0
for num in "$@"; do
    # 校验是否为正整数
    if ! [ "$num" -gt 0 ] 2>/dev/null; then
        echo "错误:参数 '$num' 不是合法的正整数" >&2
        exit 1
    fi
    # 更新最大值
    if [ "$num" -gt "$max_num" ]; then
        max_num="$num"
    fi
done

# 打印顶部的^符号
echo "^"

# 第二步:遍历每个参数打印对应的星号行
for num in "$@"; do
    # 生成指定数量的* 字符串,纯内置循环实现,无需外部工具
    star_str=""
    i=0
    while [ "$i" -lt "$num" ]; do
        star_str="${star_str}* "
        i=$((i + 1))
    done
    # 输出带前缀的行
    echo "| $star_str"
done

# 第三步:生成分割线,长度匹配最长的输出行
printf '%*s\n' $((max_num * 2 + 2)) "" | tr ' ' '-'

关键逻辑说明

  • 参数遍历:使用"$@"遍历所有传入的命令行参数,而非$#($#仅代表参数的总个数)
  • 星号生成:采用纯Shell内置的循环拼接字符串,避免调用sed、tr等外部工具,兼容性和性能更好
  • 自动适配:提前计算参数的最大值,分割线长度会自动适配输出内容,不会出现过长或过短的问题
  • 异常处理:加入了参数合法性校验,避免非法输入导致脚本运行异常

运行效果

执行命令 ./script 3 4 1 5 即可得到你给出的示例输出:

^
| * * * 
| * * * * 
| * 
| * * * * * 
------------

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:54:01