0

我有这个命令bash

cmd -c -s junk text.txt 

如果我将命令更改为

cmd -c junk -s text.txt

如何跟踪哪个参数($2$3)设置为junk

我尝试使用 for 循环,但我不知道如何junk$@.

4

2 回答 2

1

您需要在脚本中使用getopts 。像这样的东西应该工作:

while getopts "c:s:" optionName; do
   case "$optionName" in
   s) arg="$OPTARG"; echo "-s is present with [$arg]";;
   c) arg="$OPTARG"; echo "-c is present with [$arg]";;
   esac
done
于 2013-08-14T08:08:09.790 回答
0

从您展示的示例中,该-s选项似乎只有一个参数,并且junk在第一个示例中。然而,语义似乎在第二个例子中发生了变化,显然-c有一个参数,它又是junk。同样在第二个示例中,它似乎-s作为text.txt参数。

一般来说,bash 命令中的参数没有固定的位置,但如果一个选项接受一个参数,它应该直接跟在选项参数之后(在第一种情况下-s)。

正如 anubhava 所指出的,您可以使用 getopts 来解析脚本的参数。对于您更改整个语义的情况,这仍然不起作用,就像您所做的那样。

于 2013-08-14T08:11:12.143 回答