Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当第一个选项是bash中的路径时,getopts_Bash_Getopts - Fatal编程技术网

当第一个选项是bash中的路径时,getopts

当第一个选项是bash中的路径时,getopts,bash,getopts,Bash,Getopts,我对bash脚本中的getopts有问题。基本上,我的脚本必须通过以下方式调用: ./myScript/path/to/a/文件夹-a-b 我的代码顶部有以下内容: while getopts ":ab" opt; do case $opt in a) variable=a ;; b) variable=b ;; \?) echo "invalid option -$OPTARG" exit 0 esac done echo "$v

我对bash脚本中的getopts有问题。基本上,我的脚本必须通过以下方式调用:

./myScript/path/to/a/文件夹-a-b

我的代码顶部有以下内容:

while getopts ":ab" opt; do
 case $opt in
  a) 
   variable=a
   ;;
  b)    
   variable=b
   ;;
  \?)
   echo "invalid option -$OPTARG"
   exit 0
 esac
done

echo "$variable was chosen"
现在,只要我在没有/path/to/a/folder的情况下调用我的脚本,它就可以工作……我怎样才能让它工作呢

非常感谢

如果必须在参数之前放置路径,请使用a来弹出第一个位置参数,并将其余的留给getopts

# Call as ./myScript /path/to/a/folder -a -b

path_argument="$1"
shift   # Shifts away one argument by default

while getopts ":ab" opt; do
 case $opt in
  a) 
   variable=a
   ;;
  b)    
   variable=b
   ;;
  \?)
   echo "invalid option -$OPTARG"
   exit 0
 esac
done

echo "$variable was chosen, path argument was $path_argument"
如前所述,更标准的答案是将非选项参数放在选项之后。更喜欢这种样式,因为它使脚本与内置POSIX选项解析更加一致

# Call as ./myScript -a -b /path/to/a/folder 

while getopts ":ab" opt; do
 case $opt in
  a) 
   variable=a
   ;;
  b)    
   variable=b
   ;;
  \?)
   echo "invalid option -$OPTARG"
   exit 0
 esac
done
shift $((OPTIND - 1))  # shifts away every option argument,
                       # leaving your path as $1, and every
                       # positional argument as $@
path_argument="$1"
echo "$variable was chosen, path argument was $path_argument"

将路径放在参数之后。脚本如何处理
/path/to/a/文件夹