Bash脚本:避免使用空字符串参数

时间:2017-09-08 11:23:44

标签: bash shell escaping argparse spaces

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脚本的参数。

1 个答案:

答案 0 :(得分:1)

如果没有参数,

"$@"会扩展为空,所以您只需使用

即可
python test.py "$@"

如果要确保脚本的第4个参数(或更多)未传递给Python脚本,请使用bash扩展名

python test.py "${@:1:3}"