我正在尝试使用var打印真实10次,而不能正常工作
count=10
printf 'true\n%.0s' {1..$count}
这有效:
printf 'true\n%.0s' {1..10}
我知道在{vars}之前会对{}
进行评估,但我无法绕过它。
答案 0 :(得分:11)
这对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[@]}"
解释原因:支持扩展({1..10}
)在参数扩展($count
)之前发生。因此,当$count
扩展到10
时,不会再发生支撑扩展。
答案 1 :(得分:2)
另一种方式(使用外部流程):
printf 'true\n%.0s' $(seq $count)
答案 2 :(得分:0)
为了它的乐趣,这里有一个奇怪的方式:
mapfile -n $count a < /dev/urandom; printf 'true\n%.0s' ${!a[@]}
答案 3 :(得分:-2)
阅读http://www.cyberciti.biz/faq/unix-linux-iterate-over-a-variable-range-of-numbers-in-bash/
解决这个问题的方法是:
printf 'true\n%.0s' $(eval echo "{1..$count}")