是否可以将命令行参数从 bourne 脚本内传递到函数中,以便允许 getopts 处理它们。
我的脚本的其余部分很好地打包到函数中,但开始看起来我必须将参数处理移至主逻辑中。
现在是这样写的,但是不行:
processArgs()
{
while getopts j:f: arg
do
echo "${arg} -- ${OPTARG}"
case "${arg}" in
j) if [ -z "${filename}" ]; then
job_number=$OPTARG
else
echo "Filename ${filename} already set."
echo "Job number ${OPTARG} will be ignored.
fi;;
f) if [ -z "${job_number}" ]; then
filename=$OPTARG
else
echo "Job number ${job_number} already set."
echo "Filename ${OPTARG} will be ignored."
fi;;
esac
done
}
doStuff1
processArgs
doStuff2
是否可以以可以读取脚本参数的方式定义函数?这可以通过其他方式完成吗?我喜欢 getopts 的功能,但看起来在这种情况下我将不得不牺牲代码的美观来获得它。
您可以在变量之后向 getopts 提供 args。默认值是 $@,但这也是 shell 函数用来表示的their论据。解决方案是将“$@”(将脚本的所有命令行参数表示为单独的字符串)传递给 processArgs:
processArgs "$@"
将其添加到您的脚本中(并修复第 11 行中的引用),并尝试一些乱码测试参数:
$ ./try -j asdf -f fooo -fasdfasdf -j424pyagnasd
j -- asdf
f -- fooo
Job number asdf already set.
Filename fooo will be ignored.
f -- asdfasdf
Job number asdf already set.
Filename asdfasdf will be ignored.
j -- 424pyagnasd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)