有没有办法在bash中重复打印相同的字符,就像你可以使用这个结构在python中这样做:
print('%' * 3)
Run Code Online (Sandbox Code Playgroud)
给
%%%
Run Code Online (Sandbox Code Playgroud) 我需要生成一串点(.
字符)作为变量.
即,在我的Bash脚本中,输入15
我需要生成这个长度为15的字符串:...............
我需要这样做.我尝试使用它作为基础(来自Unix.com):
for i in {1..100};do printf "%s" "#";done;printf "\n"
Run Code Online (Sandbox Code Playgroud)
但是如何让100成为一个变量呢?
如何-
在shell中重复n次?我已阅读并试过这个,但这不起作用-
.它抛出错误invalid option
.以下是我使用的确切命令:
printf '-%.0s' {1..100}
Run Code Online (Sandbox Code Playgroud)
原贴线: printf '-%0.s' {1..100}
我也试过逃避-
,\
但在这种情况下,它重复\-
n次.
使用printf
,可以多次打印一个字符:
$ printf "%0.s-" {1..5}
-----
Run Code Online (Sandbox Code Playgroud)
在awk
我知道我可以做类似:
$ awk 'BEGIN {while (i++ < 5) printf "-"}'
-----
Run Code Online (Sandbox Code Playgroud)
但我想知道awk是否printf
允许这样做.
我浏览了printf
修饰符页面,但无法找到.总而言之,Bash的printf是为每个参数扩展{1..5}
和打印一个-
,所以它相当于说
$ printf "%0.s-" hello how are you 42
-----
Run Code Online (Sandbox Code Playgroud)
但是,我缺乏如何使用awk的printf来模仿这种行为的知识,如果可能的话,因为这会失败:
$ awk 'BEGIN {printf "%0.s-", 1 2 3 4 5}'
-
Run Code Online (Sandbox Code Playgroud) Bash 新手;使用这个习语来生成一个字符串的重复:
echo $(head -c $numrepeats /dev/zero | tr '\0' 'S')
Run Code Online (Sandbox Code Playgroud)
我决定用多个字符替换每个空字节(例如,“MyString”而不是“S”),所以我用 sed 尝试了以下操作
echo $(head -c $numrepeats /dev/zero | sed 's/\0/MyString/g' )
Run Code Online (Sandbox Code Playgroud)
但我只是得到一个空的输出。我意识到我必须做
echo $(head -c $numrepeats /dev/zero | sed 's/\x0/MyString/g' )
Run Code Online (Sandbox Code Playgroud)
或者
echo $(head -c $numrepeats /dev/zero | sed 's/\x00/MyString/g' )
Run Code Online (Sandbox Code Playgroud)
相反,但我不明白为什么。tr
和sed
匹配的字符有什么区别?是因为sed
匹配正则表达式吗?
编辑
有趣的发现,\0
在命令的replacement
部分's/regexp/replacement'
sed
实际上与&
. 仍然没有解释为什么\0
inregexp
与空字节不匹配(正如它在tr
和大多数其他正则表达式实现中所做的那样)
根据以下问题和思考:
https://unix.stackexchange.com/questions/188658/writing-a-character-n-times-using-the-printf-command
和
我想了解如何参数化字符/字符串的重复值。例如,以下内容非常有效:
printf " ,\n%0.s" {1..5}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想参数化 '5',请说:
num=5
Run Code Online (Sandbox Code Playgroud)
我似乎无法正确进行扩展以完成这项工作。例如:
printf " ,\n%0.s" {1..$((num))}
Run Code Online (Sandbox Code Playgroud)
失败。
任何想法/想法都会受到欢迎 - 我认为有一种方法可以做到这一点,而不必求助于 perl 或 awk,所以只是好奇是否有可能。
谢谢!
我需要一个在终端中绘制水平"线"的命令.该行必须与终端的长度完全一致(无论当前终端宽度如何),并且由短划线字符组成(尽管也可以使用水平线的unicode符号).
它是否可以着色更好.
我需要像这样使用它:
echo some text
drawline
echo more text
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
echo some text
---------------------------------------------------------------------------------
echo more text
Run Code Online (Sandbox Code Playgroud) 有时我想一次创建大量的空白(与特定字符略有不同).我尝试使用for循环执行此操作,但我只\n
使用此实现打印一次.此外,实际的'\n'字符实际上是打印而不是空行.有什么更好的方法呢?
for i in {1....100}
> do
> echo "\n"
> done
Run Code Online (Sandbox Code Playgroud) 根据tldp.org,bash 下划线变量是:
下划线变量在 shell 启动时设置,包含参数列表中传递的正在执行的 shell 或脚本的绝对文件名。随后,它在扩展后扩展为上一个命令的最后一个参数。它还设置为执行的每个命令的完整路径名,并放置在导出到该命令的环境中。检查邮件时,该参数保存邮件文件的名称。
但是这个答案是如何在 Bash 中重复一个字符?它的用法很奇怪:
# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'\b='
Run Code Online (Sandbox Code Playgroud)
使用这个变量我无法从它的语义中得到任何东西,所以问题是
$_
。bash 中的意思?
样本:
# exactly the same as perl -E 'say "=" x 100'.
echo -e ''$_{1..100}'\b='
Run Code Online (Sandbox Code Playgroud) 错误“ spawnSync /bin/sh ENOBUFS ”在执行以下行时非系统地在我的 NodeJs 应用程序中产生:
child_process.execSync(`cd /tmp/myFolder ; tar -xjf myArchive.tar.bz2`);
Run Code Online (Sandbox Code Playgroud)
存档大小为 81.5 MB,带有 NVM 的 NodeJs 版本:12.17.0。
我想*
在 zsh 中打印重复的字符。这个答案有一个解决方案,适用于bash
:
printf '*%.0s' {1..50}
Run Code Online (Sandbox Code Playgroud)
但是,当我在 中运行它时zsh
,我得到以下输出:
**************************************************%
Run Code Online (Sandbox Code Playgroud)
尾随%
标志颜色反转的地方。这对我来说很神秘,我想知道为什么会发生这种情况,我该如何避免?
我需要创建一个仅包含点符号“.”的文本文件。在每一行上重复,直到达到变量中存储的特定行数。我现在使用 while 循环,但那些带点的文件需要大约 0.5-5 百万行。因此,它需要的时间比我想要的要长一些。下面是我当前的代码:
j=0
while [[ $j != $length ]]
do
echo "." >> $file
((j++))
done
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:除了使用 while 循环之外,是否有更有效的方法来创建一个包含 x 行且每行包含相同字符(或字符串)重复的文件?
谢谢,