我正在创建一个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
答案 0 :(得分:3)
您的问题是您没有引用变量:
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"