在Bash脚本中循环传递命名参数调用外部脚本失败,该如何解决?
解决循环调用脚本时命名参数传递问题
修正后的脚本写法
while IFS= read -r line; do ./script1.sh --netId "$line" done < netNames.txt
关键说明
- 给变量添加双引号是核心:把
$line用双引号包裹,能保证读取到的整行内容作为一个完整参数传递给script1.sh,避免行内包含空格、制表符或通配符(如*)时参数被意外拆分,让--netId能正确识别对应的参数值。 - 检查输入文件格式:确认
netNames.txt的每行没有多余空格、不可见字符(比如Windows格式的\r换行符),如果存在这类问题,可使用dos2unix netNames.txt转换为Unix格式后再测试。 - 验证目标脚本的参数解析逻辑:如果
script1.sh用getopts处理参数,注意getopts默认只支持短选项(如-n),若要解析--netId这类长选项,需要改用GNUgetopt工具或手动实现长选项解析逻辑,确保目标脚本的参数处理逻辑本身无问题。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

