bash getopts 无法识别第二个参数

ksh*_*noy 0 bash getopts

这是我最简单形式的整个脚本。

#!/bin/bash
src=""
targ=${PWD}

while getopts "s:t:" opt; do
  case $opt in
    s)
      src=$OPTARG
      ;;
    t)
      targ=$OPTARG
      ;;
  esac
  shift $((OPTIND-1))
done

echo "Source: $src"
echo "Target: $targ"
Run Code Online (Sandbox Code Playgroud)

我运行这个脚本作为getopts_test -s a -t b

然而,它总是pwd在 the 前面打印 theTarget:并且从不打印b

我在这里缺少什么?

Vil*_*lle 5

从未打印的原因b是循环内的循环在第一次迭代后(即打印shift后)将已处理的选项移走。a使用 的shift $((OPTIND-1))目的是访问可能的给定可变参数。当然,一旦您删除shifttarg就会被重新分配给b,并且${PWD}不再包含在其中,因为您在任何地方都没有字符串的串联(targ以及 的选项-t)。