如何在bash中重复几个字符几次?
在 bash 脚本中,我必须连续多次包含同一个文件作为参数。像这样:
convert image.png image.png image.png [...] many_images.png
其中 image.png
应该重复几次。
是否有重复模式的 bash 简写?
In a bash script, I have to include the same file several times in a row as an argument. Like this:
convert image.png image.png image.png [...] many_images.png
where image.png
should be repeated a few times.
Is there a bash shorthand for repeating a pattern?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用大括号扩展来执行此操作:
将生成:
大括号扩展将在大括号内的每个逗号分隔字符串的大括号之前(和之后)重复字符串,生成一个由前缀、逗号分隔字符串和后缀;并用空格分隔生成的字符串。
在这种情况下,大括号和后缀之间的逗号分隔字符串是空字符串,它将生成字符串 image.png 3 次。
You can do this using brace expansion:
will produce:
Brace expansion will repeat the string(s) before (and after) the braces for each comma-separated string within the braces producing a string consiting of the prefix, the comma-separated string and the suffix; and separating the generated strings by a space.
In this case the comma-separated string between the braces and the suffix are empty strings which will produce the string image.png three times.
这适用于给定的整数(在下面的示例中为 10)。
它也可以与 xargs 一起使用:
This works with a given integer (10 in the example below).
It can also be used with
xargs
:这是一个使用数组的解决方案,因此对于包含空格、换行符等的字符串来说是稳健的。
Here is a solution that uses arrays and is thus robust for strings containing spaces, newlines etc.
这可能对你有用:
这将在
many_images.png
之前重复image.png
5 次This might work for you:
This will repeat
image.png
5 times beforemany_images.png
为了避免使用 $(command) 或
command
打开不必要的 bash 实例的缓慢代码,您可以使用大括号扩展。要重复文件名 3 次,请执行以下操作:
或使用变量来指定重复文件名次数的更具争议性的版本:
它是如何工作的。
${file[0]} 与 $file 或 ${file} 相同
Bash 首先进行大括号扩展,因此它组成了这样的序列:
Bash 请忽略这些额外的数字,这样你就得到
Which 简化为
然后
Which 是我们的想。
To avoid slow code that opens unnecessary instances of bash using $(command) or
command
you can use brace expansion.To repeat a filename 3 times do:
or a more controversial version that uses a variable to specify number of repeated file names:
How it works.
${file[0]} is same as $file or ${file}
Bash does brace expansion first and so it makes up a sequence like this:
Bash kindly ignore these extra numbers so you get
Which simplifies to
and then
Which is what we want.
到目前为止我发现的最短的 POSIX 7 解决方案:
因为
是
、seq
和{1..3}
不是 POSIX。对于您的具体示例:
Shortest POSIX 7 solution I have found so far:
since
yes
,seq
and{1..3}
are not POSIX.For your specific example: