【发布时间】:2014-05-16 19:48:21
【问题描述】:
背景信息:
我正在尝试遵循此处发布的示例:http://www.cyberciti.biz/faq/bash-for-loop/ 我想使用一个名为“i”的控制变量循环 9 次。
问题描述
我的代码如下所示:
for i in {0..8..1}
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
当我运行这段代码时,调试打印显示:
"i is {0..8..1}"
而不是介于 0 和 8 之间的值。
到目前为止我检查过的内容:
我尝试检查我的 bash 版本以确保它支持这种类型的语法。我正在运行版本 4、2、25(1)
我也尝试过使用类似 C 的语法,你为 (i=0;i
任何建议将不胜感激。
谢谢。
编辑 1
我也试过下面的代码:
for i in {0..8};
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
还有……
for i in {0..8}
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
它们都以相同的结果失败。
我也试过了:
#!/bin/bash
for ((i=0;i<9;i++));
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
这给了我错误:
test.sh: 4: test.sh: 语法错误:循环变量错误
仅供参考。我在 ubuntu 12 上运行
编辑 2
好的...所以我认为 Weberick 向我提示了这个问题... 要执行脚本,我正在运行“sh test.sh” 当我在代码中将其定义为 BASH 脚本时!我的错!
但事情就是这样。最终,我需要它同时在 bash 和 sh 中工作。 所以现在我要小心确保我以正确的方式调用脚本......我注意到以下结果:
- 当定义为 bash 脚本并且我使用 bash 执行时,C 风格的版本可以工作!
-
当定义为 sh 脚本并使用 sh 执行时,C 样式版本失败
me@devbox:~/tmp/test$ sh test.sh test.sh: 5: test.sh: 语法错误:循环变量错误
当定义为 sh 脚本并且我使用 sh 非 c 样式版本(又名 for i in {n ..x})执行时,我得到“i is {0..8}”输出。
PS。这 ”;”如果您在下一行有操作,则没有什么区别……仅供参考。
【问题讨论】:
-
你的例子对我有用...
-
我也认为你需要一个
;,比如for i in {0..8}; -
如何运行脚本?你是使用 'bash myscript.sh' 还是添加了 '#!/bin/bash'?
-
也很好奇脚本是如何运行的(即你是在做
sh myscript.sh还是./myscript.sh? - Ubuntu 的默认 shell 是 dash,它无法识别其中的某些语法)跨度> -
这就是我所怀疑的,您实际上根本没有运行 bash。 ubuntu 可能创建了一个从 /bin/bash 到 dash 的链接。