Bash 脚本:避免空字符串参数
Bash script: Avoid empty string arguments
A bash 脚本应将其参数传递给另一个脚本,在我的例子中是 python 脚本:
python test.py "" "" ""
python 脚本使用 argparse 库,如果存在空字符串参数,将 return 出错,即调用父脚本时使用的参数少于 3 个。
我在示例中使用 python 脚本的原因是,如果存在未使用的 "empty string" 值参数,它可能无法在子 shell 脚本中被识别。
避免错误的一种方法是检查参数的数量 $#
并明确处理每个可行的情况:
if [ $# -eq 0 ]
then
python test.py
elif [ $# -eq 1 ]
then
python test.py ""
elif [ $# -eq 2 ]
then
python test.py "" ""
else
python test.py "" "" ""
fi
请注意,我必须引用参数,因为它们可能包含空格。
这个(臃肿的)解决方案有哪些替代方案?
解决方案不应依赖于传递整个参数列表。可能需要更改参数的顺序或将其他局部变量添加为 python 脚本的参数。
如果没有参数,"$@"
将展开为空,因此您可以简单地使用
python test.py "$@"
如果您想确保脚本的第 4 个参数(或更多)没有传递给 Python 脚本,请使用 bash
扩展
python test.py "${@:1:3}"
A bash 脚本应将其参数传递给另一个脚本,在我的例子中是 python 脚本:
python test.py "" "" ""
python 脚本使用 argparse 库,如果存在空字符串参数,将 return 出错,即调用父脚本时使用的参数少于 3 个。 我在示例中使用 python 脚本的原因是,如果存在未使用的 "empty string" 值参数,它可能无法在子 shell 脚本中被识别。
避免错误的一种方法是检查参数的数量 $#
并明确处理每个可行的情况:
if [ $# -eq 0 ]
then
python test.py
elif [ $# -eq 1 ]
then
python test.py ""
elif [ $# -eq 2 ]
then
python test.py "" ""
else
python test.py "" "" ""
fi
请注意,我必须引用参数,因为它们可能包含空格。
这个(臃肿的)解决方案有哪些替代方案?
解决方案不应依赖于传递整个参数列表。可能需要更改参数的顺序或将其他局部变量添加为 python 脚本的参数。
"$@"
将展开为空,因此您可以简单地使用
python test.py "$@"
如果您想确保脚本的第 4 个参数(或更多)没有传递给 Python 脚本,请使用 bash
扩展
python test.py "${@:1:3}"