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 脚本:避免空字符串参数的主要内容,如果未能解决你的问题,请参考以下文章

在对列表进行双重递归时,“预检查”是避免添加无类型或空字符串的首选方法吗?

如何判断字符串是不是未在 Bash shell 脚本中定义

字符串模糊匹配

如何检查@RequestMapping 参数中的请求参数是不是为空字符串?

统一修改表单参数(表单提交的空字符串统一转null)

jQuery AJAX 表单错误。空字符串