【问题标题】:How to iterate through variables? [duplicate]如何遍历变量? [复制]
【发布时间】:2017-12-10 13:40:48
【问题描述】:

我在当前脚本中使用了以下内容

for x in {07..10}

尝试将开始、结束变量传递给脚本使用

for x in $(seq $1 $2)

由于序列从 07 开始,并且 07 是我要读取的文件名,因此我无法将变量更改为 7,因为使用序列时会发生这种情况。您能否指出我正确的方向,因为我对 bash 没有太多经验。

【问题讨论】:

  • 感谢链接,我认为这与我的问题有关

标签: bash


【解决方案1】:

使用printf获取你想要的数字格式:

for (( x=7; x<=10; x++ )); do
   str=$( printf "%02d" "$x" )
   echo filename${str}.txt
done

结果如下所示:

$ for (( x=7; x<=10; x++ )); do str=$( printf "%02d" "$x" ); echo filename${str}.txt; done
filename07.txt
filename08.txt
filename09.txt
filename10.txt

也适用于变量:

$ start="07"
$ end="10"
$ for (( x=$start; x<=$end; x++ )); do str=$( printf "%02d" "$x" ); echo filename${str}.txt; done
filename07.txt
filename08.txt
filename09.txt
filename10.txt

【讨论】:

  • 使用printf -v str "%02d" "$x" 保存分叉。
  • 我有洗碗机,所以我不介意在这里和那里使用额外的叉子。
  • 在自己的代码中马虎是可以原谅的,但是在没有任何迹象表明 OP 希望解决方案效率稍低的情况下,您可能应该尽最大努力避免循环内不必要的开销.
  • 如果效率那么重要,请不要使用 bash。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
相关资源
最近更新 更多