将bash脚本参数拆分为=&引用;
我有一个bash脚本,您可以在其中使用“-option parameter”指定选项:将bash脚本参数拆分为=&引用;,bash,parameters,sed,Bash,Parameters,Sed,我有一个bash脚本,您可以在其中使用“-option parameter”指定选项: 我想对它进行扩展,以便能够处理“-option=parameter”。有没有一种简单的方法可以在不使用特殊大小写的情况下拆分“=”?请尝试使用“”,而不是使用getopt或自行设置。它支持长参数(word)和短参数(字符) 下面是一个正在使用的示例: get_inputs () { set -- $( getopt -u -l class:,desc:,force,host:,help,verbose
我想对它进行扩展,以便能够处理“-option=parameter”。有没有一种简单的方法可以在不使用特殊大小写的情况下拆分“=”?请尝试使用“”,而不是使用getopt或自行设置。它支持长参数(word)和短参数(字符) 下面是一个正在使用的示例:
get_inputs () {
set -- $( getopt -u -l class:,desc:,force,host:,help,verbose "c:d:fh:v?" "$@" )
while [ $# -gt 0 ]; do
case "$1" in
-c|--class)
CLASS=$2
shift
;;
-d|--desc)
DESCR=$2
shift
;;
-f|--force)
FORCE=1
;;
-h|--host)
HOST=$2
shift
;;
-v|--verbose)
VERBOSE=1
;;
--help)
usage
exit
;;
*)
break
;;
esac
shift
done
}
只要稍作改变,您就可以实现您的愿望:
if [[ ! $1 =~ "^--?" ]] ; then
echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;
...
case $1 in
-*branch) # do something with $2 here
-*batch) # do something with $2 here
-*version) # do something with $2 here
*) # you get the idea
esac
测试允许在
$1
开头有一个或多个-
,只是一个注释,因为它可能对您没有用处,但解析参数是一件痛苦的事情,而且边缘案例层出不穷。最好只是使用bash内置的getopts。我觉得getopts不太擅长文字,我需要它来复制另一个脚本的某些行为,所以我没有自由使用完全正确的字母。getopts实际上不适用于多个字符标志。请查看下面我关于使用getopt的回答。当然,您必须在调用getopt
时使用“$@”
,否则,参数中的空格将被破坏。+1,但是而[$\gt-0]
是不必要的-$1
将始终在选项后面包含--
,这将在最后达到目标。您也可以使用而不是true
。
if [[ ! $1 =~ "^--?" ]] ; then
echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;
...
case $1 in
-*branch) # do something with $2 here
-*batch) # do something with $2 here
-*version) # do something with $2 here
*) # you get the idea
esac