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

编写模拟cat命令的my_cat.sh脚本求助

如何编写模拟cat命令的my_cat.sh脚本?

嘿,作为新手能尝试自己实现命令行工具超棒的!别担心,这个问题其实很基础,咱们一步步来解决。

基础版脚本(支持单个文件参数)

先给你一个能直接工作的my_cat.sh,完全满足你接收第一个参数作为目标文件的需求:

#!/bin/bash

# 检查是否传入了文件参数
if [ $# -eq 0 ]; then
    # 和cat默认行为一致:没有参数时从标准输入读取内容
    while IFS= read -r line; do
        echo "$line"
    done
else
    # 读取第一个参数指定的文件并输出每一行
    while IFS= read -r line; do
        echo "$line"
    done < "$1"
fi

测试方法

你可以用你提供的示例来验证:

echo Hello > test
bash my_cat.sh test

执行后就会输出Hello啦!

脚本解释

  • #!/bin/bash:这是脚本的"shebang"行,告诉系统用bash解释器来执行这个脚本,必不可少。
  • $#:表示传入脚本的参数个数,[ $# -eq 0 ]就是判断有没有传参数。
  • while IFS= read -r line:这是bash中安全读取文件行的标准写法:
    • IFS=:防止行首或行尾的空格被自动截断
    • -r:防止反斜杠被当作转义字符处理
  • < "$1":把第一个参数($1)对应的文件作为循环的输入源,实现读取文件内容。

其他解决方法

如果你想让脚本更贴近cat的完整功能,或者想有更简洁的写法,还有这些选择:

方法1:极简版(直接复用cat命令)

这算是"作弊"但非常高效的写法,完全模拟cat的所有行为(包括支持多个文件):

#!/bin/bash
cat "$@"

这里$@代表所有传入脚本的参数,所以你可以像用cat一样执行./my_cat.sh file1 file2,效果和原生cat一模一样。

方法2:支持多文件的手动实现

如果你想自己实现多文件处理逻辑,可以用循环遍历所有参数:

#!/bin/bash

# 遍历所有传入的文件参数
for file in "$@"; do
    while IFS= read -r line; do
        echo "$line"
    done < "$file"
done

新手小提示

  • 写完脚本后,记得给它添加执行权限:chmod +x my_cat.sh,之后就可以直接用./my_cat.sh test执行,不用每次敲bash。
  • 如果你之前写的脚本没输出,大概率是这几个原因:
    • 没加#!/bin/bash开头,系统不知道用什么解释器执行
    • 没有正确获取参数(比如误用了$0而不是$1,$0是脚本本身的名字)
    • 读取文件时没有正确指定输入源,或者循环逻辑有问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:12:30