Bash命令输出为数字变量

时间:2017-10-19 14:59:14

标签: bash shell for-loop scripting

我这样做:

VAL=$(wc -l < file_with_5_lines)
for i in {1..${VAL}}; do echo $i; done

期待这个结果:

1
2
3
4
5

而不是我得到这个:

{1..5}
  

修改

此问题被标记为重复,但我认为其他问题的接受答案无效。建议的解决方案是:

VAL=$(wc -l < file_with_5_lines)

for i in {1..$((VAL))}; do
        echo $i
done

继续给我这个结果:

{1..5}

而不是:

1
2
3
4
5

3 个答案:

答案 0 :(得分:2)

支持扩展在参数扩展之前完成,这就是为什么我们在{...}构造内部不能有变量的原因。使用常规for循环,以便您不依赖于seq之类的外部命令:

for ((i = 1; i <= VAL; i++)); do
    # your code here
done

答案 1 :(得分:1)

尝试以下代码,

VAL=$(wc -l < file_with_5_lines)
for i in `seq ${VAL}`
do 
  echo $i
done

答案 2 :(得分:0)

VAL=$(wc -l < file_with_5_lines)
for i in $(seq $VAL);do echo $i;done