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

Bash foreach loop works differently when executed from .sh file

本问题已经有最佳答案,请猛点这里访问。

以下'oneliner'做我需要的:

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

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

for-each.sh文件:

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

执行后的结果:

1
2
$ ./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。


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

1
set -B   # same as: set -o braceexpand

在你的shebang之后,这是你的脚本的第一个命令。
(相反,set +B(set +o braceexpand)会将撑杆延伸关闭。)

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