[英]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.