考虑 bash 中的花括号扩展:
for i in {1..10}; do
echo $i;
done;
我从 shell(在 macOS 或 Linux 上)调用此脚本,并且大括号确实展开:
$ ./test.sh
1
2
3
4
5
6
7
8
9
10
我想从Python调用这个脚本,例如:
import subprocess
print(subprocess.check_output("./test.sh", shell=True))
在 macOS 上,此 Python 调用展开大括号,我看到以下输出:
b'1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n'
在 Linux 上,此 Python 调用无法展开大括号,我看到以下输出:
b'{1..10}\n'
为什么大括号扩展在交互式 shell(macOS 或 Linux)上以及在 macOS 上从 Python 调用时有效,但在 Linux 上从 Python 调用时失败?
{1..10}
是一个 bash
功能,POSIX 中未定义它 sh
。
似乎
subprocess.check_output("./test.sh", shell=True)
在第二个示例 (Linux) 中调用 sh
,并在第一个示例 (macOS) 中调用 bash
(或支持此功能的其他 shell)。