我有一个函数get_flags
,我用它来解析参数。我在我要解析信息的文件中找到它,然后使用$@
将变量从主程序传递给函数。
它看起来像这样
myprogram.sh
source arg_parser.sh
get_flags some_arguments more_arguments $@
我想要一种方法来确定没有参数传递和程序员最后忘记$@
的时间之间的区别。或者更好的方法是自动包含$@
。
例如
myprogram.sh -f flag1 -a flag2
#inside the program
get_flags some_arguments more_arguments #$@ has values, but was forgotten
与
myprogram.sh #no arguments
#inside the program
get_flags some_arguments more_arguments $@ # $@ is present but empty
答案 0 :(得分:2)
您可以在参数解析器(libfile.bash
)中执行此操作:
__args=("$@")
myfunc () {
echo "The positional parameters handed to the function:"
printf '<%s>\n' "$@"
echo "The global positional parameters:"
printf '<%s>\n' "${__args[@]}"
}
由于它的来源,它可以访问我们读入数组__args
的全局位置参数,因为在myfunc
内,$@
指的是函数的位置参数。
现在,在您的脚本(script
)中,您可以像这样使用解析器:
#!/usr/bin/env bash
. libfile.bash
myfunc localarg1 localarg2
从命令行使用时如下
./script globalarg1 globalarg2
你会得到这个输出:
The positional parameters handed to the function:
<localarg1>
<localarg2>
The global positional parameters:
<globalarg1>
<globalarg2>
证明您可以从函数中访问全局位置参数。
如果您希望myfunc
自动将全局位置参数附加到本地参数,您可以执行类似
__args=("$@")
myfunc () {
set -- "$@" "${__args[@]}"
echo "The positional parameters in the function:"
printf '<%s>\n' "$@"
}
你会得到
./script global1 global2
The positional parameters in the function:
<localarg1>
<localarg2>
<global1>
<global2>
答案 1 :(得分:0)
您可以执行类似
的操作if [ "$1" == "" ]; then
printf "\\nUsage: Put your usage here \\n"
exit 1
fi
那将检查第一个参数($ 1)是否为空(“”),如果是,那么它将打印脚本的使用,然后以错误代码(1)而不是(0)退出,这是一个安静的出口。