Bash脚本中getopts无法读取参数到变量的问题求助
问题分析与解决
你的脚本逻辑本身是正确的,但变量全部为空的情况,大概率是**脚本包含Windows格式的换行符(CRLF)**导致的——复制代码时如果来源是Windows环境的编辑器,很容易引入这种不可见字符,干扰getopts的解析逻辑。
验证问题
执行以下命令查看脚本中的隐藏字符:
cat -A Code.sh
如果输出的行尾出现^M符号,就说明确实存在Windows换行符问题。
解决方法
转换脚本为Unix换行格式
使用dos2unix工具转换:dos2unix Code.sh如果没有
dos2unix,也可以用sed命令手动替换:sed -i 's/\r$//' Code.sh规范执行脚本(可选)
先给脚本添加执行权限:chmod +x Code.sh之后直接执行脚本:
./Code.sh -i test.txt -o test.txt -c 0 -p 1 -g testgenome
额外排查步骤
如果转换后仍有问题,可以先写一个极简版脚本验证getopts功能是否正常:
#!/bin/bash while getopts i: flag do case "${flag}" in i) inf=${OPTARG};; esac done echo "inf: $inf"
执行bash test.sh -i test.txt,如果能正常输出inf: test.txt,说明环境无问题,回到原脚本检查是否还有其他隐藏字符。
内容的提问来源于stack exchange,提问作者Kat
相关产品推荐
相关产品推荐

