繁体   English   中英

bash printf {}中的变量替换

[英]Variable substitution in bash printf {}

我试图使用var打印真实10次,它不起作用

count=10
printf 'true\n%.0s' {1..$count}

这有效:

printf 'true\n%.0s' {1..10}

我知道{}在vars之前进行了评估,但我无法绕过它。

这不是printf的问题,这是{1..$count} 这种扩展只能用常数来完成。

for ((i=1; i<=10; i++)); do
  printf 'true\n%.0s' "$i"
done

...或者,如果您真的想要扩展到单个命令行,请首先将参数收集到数组中:

arr=()
for ((i=1; i<=10; i++)); do arr+=( "$i" ); done
printf 'true\n%.0s' "${arr[@]}"

解释原因:Brace扩展( {1..10}参数扩展( $count之前发生。 因此,当$count扩展到10 ,将不再发生支撑扩展。

另一种方式(使用外部流程):

printf 'true\n%.0s' $(seq $count)

为了它的乐趣,这是一个有点奇怪的方式:

mapfile -n $count a < /dev/urandom; printf 'true\n%.0s' ${!a[@]}

阅读http://www.cyberciti.biz/faq/unix-linux-iterate-over-a-variable-range-of-numbers-in-bash/

解决这个问题的方法是:

printf 'true\n%.0s' $(eval echo "{1..$count}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM