【问题标题】:Shell program, error in for loop. Variable not usedShell 程序,for 循环出错。未使用的变量
【发布时间】:2018-12-13 09:12:41
【问题描述】:

我对 shell 脚本很陌生。 我的代码应该很简单,很有教程,但我不能让它工作:

case='Naca0012_pitch_V1'
for i in {0..800..10} 
do
    tec $case.$i.plt;
    cat tec.00* > $case.$i.dat;
done

命令tec 生成一些我需要连接的文件。

我得到的是:

Error opening file Naca0012_pitch_V1.{0..800..10}.plt

来自tec 实用程序。

似乎代码放置了“{0..800..10}”,而不是用大括号扩展中的一种可能情况替换变量。

【问题讨论】:

  • in 子句后的代码无效。
  • @Simonare 对不起,你是什么意思?我该如何解决?
  • 你的脚本的shebang是什么,你使用的是哪个shell?您提到了 bash,但这是完全有效的 bash。
  • 如果您使用的是 4.0+ 版本,这是完美的 bash 请使用 echo $BASH_VERSION 验证您的 bash 版本
  • 在终端中,执行 ls -l /bin/sh。也许你的外壳是 /bin/dash ??

标签: bash shell for-loop


【解决方案1】:

您尝试使用大括号扩展。根据您使用的外壳,是否支持大括号扩展。不支持大括号扩展的 Shell 是 POSIX 。支持大括号扩展的 Shell 是

Posix 兼容 shell(shdash):如果你想在 shdash 中模仿这种大括号扩展,你必须这样做 p>

for i in `seq 0 10 800`; do
  ...
done

禁用大括号扩展:虽然 都支持大括号扩展,但它可能已被禁用。对于,这可以通过执行命令来完成

$ set +B
$ for i in {0..800..10}; do echo $i; done
{0..800..10} 

【讨论】:

  • 感谢您的解释。我使用了错误的外壳。
【解决方案2】:

您的循环不正确。

如果你的意图是从 0 循环到 800。你的循环需要像

for n in $(seq 1 100)
do 
    #yourcode 
done

【讨论】:

  • 对不起,你的说法是错误的,循环是完全有效的。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 2015-11-27
  • 2014-01-23
  • 1970-01-01
  • 2019-12-19
相关资源
最近更新 更多