Bash Shell程序,for循环中出错。未使用变量
我对shell脚本非常陌生。 我的代码应该非常简单,相当简单,但我无法让它工作: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实用程序 代码似乎放置了
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??抱歉,您的声明是错误的,循环是完全有效的。感谢您的解释。我用错了外壳。