如何通过Bash脚本无引号传参,正确调用双参数Python脚本
如何通过Bash脚本正确传递带空格的参数给Python脚本
我懂你的需求——你想通过Bash脚本中转调用Python脚本,而且希望用./script.sh arg1 arg2 stillarg2这种无引号的方式传参,让Python最终收到两个参数:第一个是arg1,第二个是合并后的arg2 stillarg2。
先说说你之前尝试的问题:你写的"'${1}'" "'${2} ${3}'"会把单引号作为参数的一部分传递给Python,比如第一个参数会变成'arg1'(带单引号),这大概率不是你的Python脚本期望的格式,而且这种写法还可能触发特殊字符解析的问题,导致报错。
给你两个靠谱的解决方案,根据你的实际需求选:
方案1:合并从第2个开始的所有参数(推荐)
如果你的Bash脚本可能接收超过3个参数,希望把第一个参数单独传,剩下的所有参数合并成一个整体传给Python,用这个写法:
#!/bin/bash ./script.py "$1" "${*:2}"
"$1":确保第一个参数原样传递,哪怕里面有特殊字符或空格(不过你这里第一个参数是arg1,没空格,但养成好习惯总是对的)"${*:2}":这是Bash的参数切片语法,意思是从第2个参数开始,把所有后续参数用默认的空格连接成一个字符串,并且作为一个整体传递给Python,完美还原你直接调用Python时'arg2 stillarg2'的效果。
方案2:明确合并第2和第3个参数
如果你确定Bash脚本只会收到3个参数,只想把第2、3个合并,那可以直接写:
#!/bin/bash ./script.py "$1" "$2 $3"
这个写法更直白,把$2和$3用空格拼接后,作为一个整体传递给Python的第二个参数。
验证一下:当你执行./script.sh arg1 arg2 stillarg2时,不管用哪个方案,Python脚本收到的参数都会和你直接执行./script.py 'arg1' 'arg2 stillarg2'完全一致,不会再出现参数拆分错误的问题。
内容的提问来源于stack exchange,提问作者Caucasian Malaysian
相关产品推荐
相关产品推荐

