如何在 unix 中调用带空格的函数并将参数传递给函数

How to call and pass arguments to functions with spaces in unix

我正在创建一个 unix 脚本,它将在 unix 中调用和传递参数给函数。调用后,该函数应确定传递给它的参数数量。我尝试了调用函数并将参数传递给函数的正常方法,它起作用了。但是,我注意到该函数逐字计算参数,我的问题是,如果我有一个包含空格的参数或多个参数但其中一些应该是单个参数但带有空格怎么办?是否可以通过函数识别指定的参数应被视为单个参数?我已经使用了双引号,但没有用。

这是我脚本的相关部分。

#!/usr/bin/ksh

ARG_CNT() {
    SCRIPT_AR_CNT=$#
    if [ SCRIPT_AR_CNT -lt 3 ]; then
        echo "Error. Incorrect number of arguments specified."
        echo "Error. Execute \"./script_template.ksh -h\" for help."
        exit 1
    fi
}

echo "Specify the Arguments: "
read SCRIPT_AR
if [ "${SCRIPT_AR}" = "" ] || [ "${SCRIPT_AR}" = "." ]; then
    exit
else
    ARG_CNT $SCRIPT_AR
fi

你的问题是你没有引用你的变量:

ARG_CNT $SCRIPT_AR

如果您不引用常规变量,它们将在 $IFS 上拆分。如果你明确想要这种拆分,你应该只省略引号,而且这种情况应该很少见(所以评论它)。引用也略微提高了性能。

ARG_CNT "$SCRIPT_AR"

如果我可以建议更多修改:

#!/usr/bin/ksh

arg_cnt() {
  #ALL_CAPS should be reserved to env variables (exported vars) and  shell config variables
    script_ar_cnt=$# 
    [ script_ar_cnt -lt 3 ] && {
        echo "Error. Incorrect number of arguments specified."
        echo "Error. Execute \"./script_template.ksh -h\" for help."
        exit 1
    } >&2 
}

echo "Specify the Arguments: "
read script_ar

ex_dataerr=65   # data format error 
{ [ -z "$script_ar" ] || [ "$script_ar" = "." ]; } && exit "$ex_dataerr"

arg_cnt "$script_ar"