Bash 脚本:避免空字符串参数
Posted
技术标签:
【中文标题】Bash 脚本:避免空字符串参数【英文标题】:Bash script: Avoid empty string arguments 【发布时间】:2018-02-17 07:33:40 【问题描述】:一个 bash 脚本应该将它的参数传递给另一个脚本,在我的例子中是一个 python 脚本:
python test.py "$1" "$2" "$3"
python 脚本使用 argparse 库,如果存在空字符串参数,即使用少于 3 个参数调用父脚本,将返回错误。 我在示例中使用 python 脚本的原因是,如果存在未使用的“空字符串”值参数,它可能不会在辅助 shell 脚本中被识别。
规避错误的一种方法是检查参数的数量$#
并明确处理每个可行的情况:
if [ $# -eq 0 ]
then
python test.py
elif [ $# -eq 1 ]
then
python test.py "$1"
elif [ $# -eq 2 ]
then
python test.py "$1" "$2"
else
python test.py "$1" "$2" "$3"
fi
请注意,我必须引用参数,因为它们可能包含空格。
这个(臃肿的)解决方案有哪些替代方案?
解决方案不应依赖于将参数列表作为一个整体进行传递。可能需要更改参数的顺序或将其他局部变量作为参数添加到 python 脚本。
【问题讨论】:
你也可以python test.py $1 $2 $3 $4
,如果你是...hrm...保证其中任何一个都没有空格。
【参考方案1】:
"$@"
如果没有参数,则扩展为空,因此您可以简单地使用
python test.py "$@"
如果您想确保脚本的第 4 个参数(或更多)没有传递给 Python 脚本,请使用 bash
扩展
python test.py "$@:1:3"
【讨论】:
以上是关于Bash 脚本:避免空字符串参数的主要内容,如果未能解决你的问题,请参考以下文章
在对列表进行双重递归时,“预检查”是避免添加无类型或空字符串的首选方法吗?