以下'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。
答案 0 :(得分:4)
如果你确信bash
确实执行了你的脚本,你可以明确启用大括号扩展(扩展{...}
表达式),如下所示:
set -B # same as: set -o braceexpand
在你的shebang之后使这个脚本成为你的第一个命令。
(相反,set +B
(set +o braceexpand
)会将括号延长关闭。)
可以想象,您的系统配置为默认关闭大括号扩展名。