问题描述:
for的各种句式语法中,for((i=0;i<10;i++))这一句式,在bash中能够顺利得到执行
如果用sh执行 *.sh,for的这一句式是无法执行的,会报错“Syntax error: Bad for loop variable”。
后来在网上找原因的时候,发现有网友反应脚本中如果使用declare也会出现类似情况,
即在sh中执行就报错“delcare: not found”,在bash中就可以正常执行。
知其所以然:
键入which sh,找到Ubuntu的sh位于/bin/sh,然后 ls -l /bin/sh ,发现/bin/sh其实是一个硬链接,指向了dash。
而dash虽然体积小速度快,兼容性好,但是相应的,在bash中能够顺利执行的一些东西在dash中就不支持了。
解决办法:
简单只是练习或偶尔执行脚本的话,使用bash 执行 *.sh就是了;
如果想彻底解决,就使用度娘给的办法:键入sudo dpkg-reconfigure dash,并选择否。即强制ubuntu不使用dash作为系统默认的shell。
然后再次ls -l /bin/sh,就会看到“/bin/sh -> bash”了。解决!