从 Python 调用时,在 Linux 中的 bash 上大括号扩展失败

问题描述 投票:0回答:1

考虑 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 调用时失败?

python bash
1个回答
0
投票

{1..10}
是一个
bash
功能,POSIX 中未定义它
sh

似乎

subprocess.check_output("./test.sh", shell=True)
在第二个示例 (Linux) 中调用
sh
,并在第一个示例 (macOS) 中调用
bash
(或支持此功能的其他 shell)。

© www.soinside.com 2019 - 2024. All rights reserved.