首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在cygwin上使用getopts时出错

在cygwin上使用getopts时出错
EN

Stack Overflow用户
提问于 2013-03-17 01:42:36
回答 1查看 916关注 0票数 0

我正在尝试在bash脚本中使用cygwin上的getopts。代码如下:

代码语言:javascript
运行
复制
#!/bin/bash

# Sample program to deal with getopts.

echo "Number of input arguments = $#";
i=0;

while [ ${i} -lt 10 ];
do
  i=$[${i}+1];
  echo ${i};
done

while getopts ":a:b:c:e:" opt;
do
  case ${opt} in
  a)
   echo "-a was triggered with argument: ${OPTARG}";
  ;;

  b)
  echo "-b was triggered with argument: ${OPTARG}"
  ;;

  c)
   echo "-c was triggered with argument: $[OPTARG}"
  ;;

  e)
   echo "-e was triggered with argument: ${OPTARG}"
  ;;

  ?)
   echo "Invalid argument: ${OPTARG}"
  ;;
  esac
done

当我运行上面的代码时,我得到以下错误:

代码语言:javascript
运行
复制
./getOpts_sample.bash: line 37: syntax error near unexpected token `done'
./getOpts_sample.bash: line 37: `done'  

我不能理解这个错误背后的原因。为什么getopts循环不工作,而第一个循环工作?是不是因为我的系统没有安装getopts?我该如何检查呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-17 01:49:28

这不是特定于cygwin的;有一个语法错误行26:

代码语言:javascript
运行
复制
echo "-c was triggered with argument: $[OPTARG}"

{替换[,它就可以工作了。

注意第11行:echo ${i}是错误的,使用echo ${!i}打印第i个参数。

第10行注意:语法$[ ]现在已过时;您可以使用(( )),如下所示:

代码语言:javascript
运行
复制
((i++))

或者更好的做法是,将第8-12行替换为:

代码语言:javascript
运行
复制
for ((i=0; i<10; i++)); do echo ${!i}; done
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15452505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档