【问题标题】:Bash command output as numeric variable [duplicate]Bash命令输出为数字变量[重复]
【发布时间】:2017-10-20 21:52:16
【问题描述】:

我这样做:

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

【问题讨论】:

  • 只写一个普通的数字for循环。

标签: bash shell for-loop scripting


【解决方案1】:

大括号扩展是在参数扩展之前完成的,这就是为什么我们不能在{...} 构造中包含变量。使用常规的 for 循环,这样您就不会依赖像 seq 这样的外部命令:

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

【讨论】:

  • 这是最好的解决方案,无需外部命令
【解决方案2】:

试试下面的代码,

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

【讨论】:

  • 这很好用
【解决方案3】:
VAL=$(wc -l < file_with_5_lines)
for i in $(seq $VAL);do echo $i;done

【讨论】:

  • 这里有什么问题?
  • 在这里试试:jdoodle.com/test-bash-shell-script-onlineecho -e "line1\nline2\nline3\nline4\nline5" &gt; input.txt;VAL=$(wc -l &lt; input.txt);for i in $(seq $VAL);do echo $i;done
  • 这很好用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2017-11-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
相关资源
最近更新 更多