bash getopts没有认识到第二个参数

时间:2015-12-05 04:26:31

标签: bash getopts

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

getopts_test -s a -t b

我将此脚本作为pwd

运行

但是,它始终会在Target:前面打b而从不for(i=0;i<BUF_SIZE;i++) { write(sockfd,plaintext[i],1); if(plaintext[i]=='0') break; } write(sockfd,'^',sizeof(char));

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

@ glenn-jackman在评论中提出的替代方案 就是这样:

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

while getopts "s:t:" opt; do
  case $opt in
    s)
      src=$OPTARG
      echo "Source: $src"
      ;;
    t)
      targ=$OPTARG
      echo "Target: $targ"
      ;;
  esac

done

shift $((OPTIND-1)) # Turning to non-option arguments say a file name and so on.

在这里,您可以选择没有shift的自然参数。