从.sh文件执行时,Bash foreach循环的工作方式不同

时间:2014-01-22 16:14:04

标签: linux bash shell

以下'oneliner'可以满足我的需求:

$ for i in {1..5}; do echo $i; done
1
2
3
4
5

但是,当我将完全相同的代码放入for-each.sh文件并执行它时,我会得到不同的结果。为什么呢?

for-each.sh文件:

#!/bin/bash
for i in {1..10}; do echo $i; done

执行后的结果:

$ ./for-each.sh
{1..10}

修改

UF。对不起。现在我注意到我通过sh ./for-each.sh命令而不是./for-each.sh执行了for-each.sh。我不知道bash,sh,dash之间的区别......阅读stackoverflow.com/a/5725402/915756之后我意识到我用破折号执行了文件,默认情况下我的Debian机器指向/ bin / sh。

1 个答案:

答案 0 :(得分:4)

如果你确信bash确实执行了你的脚本,你可以明确启用大括号扩展(扩展{...}表达式),如下所示:

set -B   # same as: set -o braceexpand

在你的shebang之后使这个脚本成为你的第一个命令。 (相反,set +Bset +o braceexpand)会将括号延长关闭。)

可以想象,您的系统配置为默认关闭大括号扩展名。