shell - 如何在本机 POSIX shell 脚本中乘以一个字符或字符串?
问题描述
这不是另一个问题的重复,原因有两个。该问题没有指定答案必须是 POSIX。该问题的标记答案无法在 Dash shell 中正确运行。(我不知道如何判断答案是否是 POSIX,但它没有在最新版本的 Dash 上运行。
澄清一下,我只想使用 POSIX shell 内置函数。我应该更清楚地说明这一点。据我所知,seq 是一个 GNU 实用程序,这意味着我必须生成一个外部程序。我不想产生任何外部程序。
我想知道在 shell 脚本中乘以字符串的最有效方法。例如,脚本将执行如下...
./multiplychar "*" "5"
*****
./multiplychar "*" "1"
*
./multiplychar "*" "0"
# It would not output anything
我似乎再也找不到它了,但我很久以前就为bash找到了这个问题。然而,所有的答案要么使用了像 Perl ex 这样的外部程序,要么使用了perl -E "print '$' x $2"
bashisms。
我想知道如何在 POSIX shell 中本地完成此操作。我正在使用破折号。如果有多种方法,如果出于效率考虑,我将处理小于 100 的小数字。(这是一个严格基于文本的音量条通知的脚本。)
外壳:破折号
操作系统:Arch Linux
解决方案
我发现的最短的几乎是这样的,没有循环,没有seq
:
(根据 MemReflect 的评论编辑)
$ printf "%9s" ' ' | tr ' ' x
xxxxxxxxx
所以你可以这样做:
#!/bin/sh
if [ $2 -eq 0 ]; then
exit
fi
printf "%${2}s\n" ' ' | tr ' ' "$1"
$ ./multiplychar "*" "5"
*****
$ ./multiplychar "*" "1"
*
$ ./multiplychar "*" "0"
$
推荐阅读
- elasticsearch - Elasticsearch 中的公斤到克转换处理器
- tesseract - 图像数据无法转换为浮点数
- react-native - react-native-reanimated 调整大小按钮
- python - 系统错误:
返回 NULL 而不设置错误 - php - NTLM Auth 不提示需要有效用户和 PHP
- html - 覆盖/替换 jquery 点击函数
- angular - post请求json中的角度getter和setter行为差异
- amazon-web-services - 如何在 AWS EC2 上部署 Flutter 网站?
- javascript - useRef 当前仅在第二次更新时获取其值
- c# - WPF:按下 SHIFT 时更改按钮文本