Linux getopt、unixshell脚本中的问题
嗨,有人可以解决这个问题,我不能得到输出 我不能得到-p的输出Linux getopt、unixshell脚本中的问题,linux,unix,shell,Linux,Unix,Shell,嗨,有人可以解决这个问题,我不能得到输出 我不能得到-p的输出 #!/bin/bash args=`getopt c:m:p $*` if [ $? != 0 -o $# == 0 ] then echo 'Usage: -c <current-dir> -m <my dir> -p <argument>' exit 1 fi set -- $args for i do case "$i" in -c
#!/bin/bash
args=`getopt c:m:p $*`
if [ $? != 0 -o $# == 0 ]
then
echo 'Usage: -c <current-dir> -m <my dir> -p <argument>'
exit 1
fi
set -- $args
for i
do
case "$i" in
-c) shift;CURRDIR=$1;shift;shift ;;
-m) MYDIR=$1;shift;;
-p) ARGVAL=$OPTARG;;
esac
done
echo "CURRDIR = $CURRDIR"
echo "MYDIR = $MYDIR"
echo "ARGVAL = $ARGVAL"
./1.sh -c "def" -m "ref" -p "ref -k ref"
getopt
您需要在p之后添加冒号,以指示-p接受参数。您还应该将$*更改为$@以更好地处理空间
args=`getopt c:m:p: "$@"`
您还混淆了getopt和getopts$OPTARG是一种getopts功能。使用普通的getopt和set,您只需使用$2,然后转移参数
-p) ARGVAL=$2; shift 2;;
在这一点上,您已经用getopt做了尽可能好的工作。不幸的是,不管你做什么,它都不能处理-p的多词参数。为此,我们需要使用getopts
格托普斯
发件人:
更易于使用,通常比getopt更好,当然在类似csh的shell中不可用。无论如何,你不应该用那些
这与getopt的工作方式大不相同。首先,因为它是内置的,所以通常找不到单独的手册页,尽管help getopts可能会为您提供所需的帮助
旧的getopt只调用一次,它修改了环境,正如我们上面看到的。每次处理参数时都会调用内置的getopts,它不会更改原始参数
使用getopts要简单得多。您的整个循环可以简化为:
while getopts c:m:p: flag
do
case "$flag" in
c) CURRDIR=$OPTARG;;
m) MYDIR=$OPTARG;;
p) ARGVAL=$OPTARG;;
esac
done
无需移位,每次只需读取$OPTARG即可获得每个选项的值。getopt
您需要在p之后添加冒号,以指示-p接受参数。您还应该将$*更改为$@以更好地处理空间
args=`getopt c:m:p: "$@"`
您还混淆了getopt和getopts$OPTARG是一种getopts功能。使用普通的getopt和set,您只需使用$2,然后转移参数
-p) ARGVAL=$2; shift 2;;
在这一点上,您已经用getopt做了尽可能好的工作。不幸的是,不管你做什么,它都不能处理-p的多词参数。为此,我们需要使用getopts
格托普斯
发件人:
更易于使用,通常比getopt更好,当然在类似csh的shell中不可用。无论如何,你不应该用那些
这与getopt的工作方式大不相同。首先,因为它是内置的,所以通常找不到单独的手册页,尽管help getopts可能会为您提供所需的帮助
旧的getopt只调用一次,它修改了环境,正如我们上面看到的。每次处理参数时都会调用内置的getopts,它不会更改原始参数
使用getopts要简单得多。您的整个循环可以简化为:
while getopts c:m:p: flag
do
case "$flag" in
c) CURRDIR=$OPTARG;;
m) MYDIR=$OPTARG;;
p) ARGVAL=$OPTARG;;
esac
done
无需移位,每次只需读取$OPTARG即可获得每个选项的值。尝试getopt-T时会看到什么;echo$??当您尝试getopt-T时,您看到了什么;echo$??