gpt4 book ai didi

unix - 如何在 Bourne Shell 中重复一个字符?

转载 作者:行者123 更新时间:2023-12-04 23:46:24 24 4
gpt4 key购买 nike

我想重复 # 10 次,比如:

"##########" 

如何在 Bourne shell (/bin/sh) 中执行此操作?我试过使用 print,但我猜它只适用于 bash shell。

请不要给出 bash 语法。

最佳答案

shell 本身没有明显的重复字符串的功能。只需重复十次,就很难击败显而易见的东西

echo '##########'

为了将单个字符重复指定的次数,即使在繁忙的 BusyBox 上也应该可以工作。

dd if=/dev/zero bs=10 count=1 | tr '\0' '#'

不是很优雅但开销相当低。 (您可能需要从 dd 重定向标准错误以摆脱讨厌的进度消息。)

如果您有一个保证足够长的文件(例如,您当前正在运行的脚本),您可以将前 10 个字符替换为 tr

head -c 10 "$0" | tr '\000-\377' '#'

如果你有一个非常传统的用户空间(比如 head 不支持 -c 选项)一个 1980 年代兼容的变体可能是

yes '#' | head -n 10 | tr -d '\n'

(您的 tr 可能不完全支持我在这里使用的反斜杠序列。请查阅它的手册页或您本地 1970 年代后期的学术程序员。)

...或者,见鬼

strings /bin/sh | sed 's/.*/#/;10q' | tr -d '\n'  # don't do this at home :-)

在没有外部实用程序的纯遗留 Bourne shell 中,您真的不能做得比

for f in 0 1 2 3 4 5 6 7 8 9; do
printf '#'
done

在一般情况下,如果您能想出一个生成器表达式(至少)产生所需的重复次数,您就可以对其进行循环。下面是 seqjot 的简单替换:

echo | awk '{ for (i=0; i<10; ++i) print i }'

但是你也可以从 Awk 中输出:

echo | awk '{ for (i=0; i<10; ++i) printf "#" }'

关于unix - 如何在 Bourne Shell 中重复一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com