Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell程序,for循环中出错。未使用变量_Bash_Shell_For Loop_Sh_Dash_Ksh_Zsh - Fatal编程技术网

Bash Shell程序,for循环中出错。未使用变量

Bash Shell程序,for循环中出错。未使用变量,bash,shell,for-loop,sh,dash,ksh,zsh,Bash,Shell,For Loop,Sh,Dash,Ksh,Zsh,我对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实用程序 代码似乎放置了

我对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}”,而不是用大括号扩展中的一种可能的情况替换变量

您的循环不正确

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

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

您尝试使用支架展开。根据您使用的外壳,是否支持支架扩展。不支持支架扩展的外壳是POSIX和。确实支持大括号的壳包括、和

Posix complient Shell(
sh
dash
):
如果要在
sh
dash
中模拟这种括号扩展,必须执行以下操作

for i in `seq 0 10 800`; do
  ...
done
禁用支架扩展:当所有支架都支持支架扩展时,可能已禁用支架扩展。这可以通过执行命令来完成

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

in子句后面的代码无效。@Simonare对不起,您的意思是什么?我该如何修复它?你的脚本的shebang是什么,你使用的是哪个shell?您提到了bash,但这是完美有效的bash。如果您使用的是4.0+版,则这是完美的bash。请在终端中使用
echo$bash\u version
验证您的bash版本,执行ls-l/bin/sh。可能您的shell是/bin/dash??抱歉,您的声明是错误的,循环是完全有效的。感谢您的解释。我用错了外壳。