如何从Shell脚本向Python程序传递可变数量的参数?
解决Shell脚本传递可变参数给Python的问题
情况1:无需单独处理每个参数
如果只是要把Shell脚本收到的所有参数原封不动传给Python,根本不用写循环,直接用"$@"这个特殊变量就行——它会完美保留每个参数的原始格式(比如带空格的参数不会被拆成多个),等价于把所有参数按"$1" "$2" "$3" ...的形式传递。
示例代码:
# 保留你的其他预处理逻辑(如果有的话) python3.6 abc.py "$@"
情况2:需要先处理每个参数
如果必须对每个参数做修改(比如替换内容、添加前缀后缀),可以用数组存储处理后的参数,再传递给Python:
# 初始化空数组存处理后的参数 processed_args=() # 遍历所有传入的参数 for arg in "$@"; do # 这里写你的处理逻辑,比如给参数添加前缀 processed_arg="processed_$arg" # 将处理后的参数加入数组 processed_args+=("$processed_arg") done # 把数组中的所有参数传给Python python3.6 abc.py "${processed_args[@]}"
关键注意点
- 必须用双引号包裹
"$@"和"${processed_args[@]}",否则如果参数包含空格、引号或特殊字符,会被Shell错误拆分,导致Python收到的参数混乱。 - 不带双引号的
$@会把所有参数拼接成一个字符串再拆分,这是错误用法,绝对要避免。
内容的提问来源于stack exchange,提问作者Aniket
相关产品推荐
相关产品推荐

