在shell脚本中创建重复字符串

Rub*_*n10 38 unix shell

我需要生成一串点(.字符)作为变量.

即,在我的Bash脚本中,输入15我需要生成这个长度为15的字符串:...............

我需要这样做.我尝试使用它作为基础(来自Unix.com):

for i in {1..100};do printf "%s" "#";done;printf "\n"
Run Code Online (Sandbox Code Playgroud)

但是如何让100成为一个变量呢?

小智 64

您可以从/ dev/zero获得所需数量的NULL字节.然后,您可以将这些转换为其他字符.以下打印16小写a

head -c 16 < /dev/zero | tr '\0' '\141'
Run Code Online (Sandbox Code Playgroud)

  • +1是一个甜蜜便携的解决方案,没有肮脏的基础或产生数百个过程 (7认同)
  • 你可以直接使用/ dev/zero,不需要重定向 (3认同)
  • 不*那甜美和便携:"头:非法选项 - c"(SunOS 5.10 Generic_150401-20 i86pc i386 i86pc) (3认同)
  • 您可以使用“dd”代替“dd if=/dev/zero bs=1 count=16”来替换“head”部分。 (3认同)
  • `head -c`只能在GNU和BSD工具上移植,它不是POSIX. (2认同)

Chr*_*sen 32

len=100 ch='#'
printf '%*s' "$len" | tr ' ' "$ch"
Run Code Online (Sandbox Code Playgroud)


Epi*_*ene 17

没有循环的最简单和最短的方式

VAR=15
Run Code Online (Sandbox Code Playgroud)

打印与VAR一样多的点(如果您愿意,可将第一个点更改为任何其他字符):

printf '.%.0s' {1..$VAR}
Run Code Online (Sandbox Code Playgroud)

将虚线保存在稍后要使用的变量中:

line=`printf '.%.0s' {1..$VAR}`
echo "Sign here $line"
Run Code Online (Sandbox Code Playgroud)

- 从dogbane的答案中偷偷偷走了/sf/answers/374488971/

编辑:由于我现在切换到 fish shell,这里是config.fish中定义的一个函数,它在shell中方便地执行:

function line -a char -a length
  printf '%*s\n' $length "" | tr ' ' $char
end
Run Code Online (Sandbox Code Playgroud)

用途:line = 8生产========,line \" 8生产"""""""".

  • 这是利用 printf 的 shell 功能的有趣方法,该功能可重复使用参数,直到满足与零字段宽度的组合,强制仅打印 % 之前的字符串。这也可以用作除法的技巧(添加 %.0s 两次以强制每次传递消耗 2 个参数) (2认同)
  • 如果我使用eval,这只适用于我的shell(bash):`VAR = 15; eval printf'=%.0s'{1 .. $ VAR}` (2认同)
  • @ 6EQUJ5在`bash`中,不能在大括号扩展中使用变量。相反,您可以使用$(seq 1 $ VAR)代替{{1 .. $ VAR}` (2认同)

Chr*_*zig 6

在大多数系统中,您可以轻松完成

N=100
myvar=`perl -e "print '.' x $N;"`
Run Code Online (Sandbox Code Playgroud)


Caf*_*eur 5

我在另一个问题中演示了使用单个命令完成此任务的方法,假设要生成固定数量的字符。

我在最后添加了一个关于生成可变数量的重复字符的附录,这正是您所要求的,所以我之前的回答在这里是相关的:

/sf/answers/1192168351/

我提供了它在那里如何工作的完整解释。在这里,我将添加代码来完成您的要求:

    n=20 # This the number of characters you want to produce

    variable=$(printf "%0.s." $(seq 1 $n)) # Fill $variable with $n periods

    echo $variable # Output content of $variable to terminal
Run Code Online (Sandbox Code Playgroud)

输出:

....................
Run Code Online (Sandbox Code Playgroud)