dot*_*dot 6 linux bash for-loop
背景资料:
我试图按照这里发布的示例: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
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,调试打印显示:
"i is {0..8..1}"
Run Code Online (Sandbox Code Playgroud)
而不是0到8之间的值.
我到目前为止所检查的内容:
我试图检查我的bash版本,以确保它支持这种类型的语法.我正在运行版本4,2,25(1)
我也尝试过使用类似C语法(i = 0; i <= 8; i ++),但这也不起作用.
任何建议,将不胜感激.
谢谢.
编辑1
我也尝试过以下代码:
for i in {0..8};
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
Run Code Online (Sandbox Code Playgroud)
和...
for i in {0..8}
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
Run Code Online (Sandbox Code Playgroud)
他们都失败了同样的结果.
我也尝试过:
#!/bin/bash
for ((i=0;i<9;i++));
do
echo "i is $i"
tmpdate=$(date -d "$i days" "+%b %d")
echo $tmpdate
done
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
test.sh:4:test.sh:语法错误:循环变量错误
仅供参考.我在ubuntu 12上运行
编辑2
好吧......所以我认为Weberick向我提出了这个问题......为了执行脚本,我在代码中运行了"sh test.sh",我将其定义为BASH脚本!我的错!
但这就是事情.最终,我需要它在bash和sh中工作.所以现在我小心翼翼地确保我以正确的方式调用脚本......我注意到以下结果:
当定义为sh脚本并且我使用sh执行时,C风格版本失败
me @ devbox:〜/ tmp/test $ sh test.sh test.sh:5:test.sh:语法错误:循环变量不好
当定义为sh脚本并且我使用sh执行NON c样式版本(又名为{n ..x}中的i)时,我得到"i is {0..8}"输出.
PS.";" 如果你在下一行做了那就没有什么区别......只是我们.
Ubuntu的默认外壳是dash,它无法识别您尝试过的任何一种bashism(括号扩展,C风格的for循环)。尝试使用bash显式运行脚本:
bash myscript.sh
Run Code Online (Sandbox Code Playgroud)
或将shebang设置为#!/bin/bash。确保不要使用运行脚本sh myscript.sh。
如果您使用破折号应该可以seq:
for i in $(seq 0 1 8); do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
刚好在中{0..8}工作bash,默认增量为1。如果要在循环中使用C风格的循环bash:
for ((i=0;i<9;i++)); do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6353 次 |
| 最近记录: |