首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash:如何构建一个递归的cowsay

Bash:如何构建一个递归的cowsay
EN

Stack Overflow用户
提问于 2017-04-07 15:50:39
回答 2查看 1.9K关注 0票数 16

下面是一个linux命令(您可能需要cowsay应用程序。

代码语言:javascript
复制
cowsay 'moo'

下面是另一个命令:

代码语言:javascript
复制
cowsay 'moo' | cowsay -n

结果非常有趣:

代码语言:javascript
复制
 ______________________________
/  _____                       \
| < moo >                      |
|  -----                       |
|         \   ^__^             |
|          \  (oo)\_______     |
|             (__)\       )\/\ |
|                 ||----w |    |
\                 ||     ||    /
 ------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

现在,当然,将这个管道命令重复N次是非常有趣的。它看起来有点像这样:

代码语言:javascript
复制
 cowsay 'moo' | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n | cowsay -n

但我在想,一定有更好的方法来实现这一点。比方说,我想要500头母牛互相说话,或者1000头,或者100万头。当然,我不需要把手指放在粘贴按钮上?

这里有一个问题;在bash (命令或脚本)中,有没有一种方法可以递归地将命令的输出传递给自己给定的次数?

EN

回答 2

Stack Overflow用户

发布于 2017-04-07 16:52:52

代码语言:javascript
复制
cowsayN() {
    local n=$1
    shift
    if ((n>1)); then
        cowsay -n | cowsayN $((n-1))
    else
        cowsay -n
    fi
}
echo 'moo' | cowsayN 500
票数 13
EN

Stack Overflow用户

发布于 2017-04-07 15:56:04

我暂时不能测试它:

代码语言:javascript
复制
output=$(cowsay 'moo')
for ((i=0;i<50;i+=1)); do output=$(cowsay "$output"); done
echo "$output"

修改了添加<<<以将值作为输入传递的情况

代码语言:javascript
复制
output=$(cowsay -n <<<'moo')
for ((i=0;i<50;i+=1)); do output=$(cowsay -n <<<"$output"); done
echo "$output"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43272602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档