我有这个命令bash
:
cmd -c -s junk text.txt
如果我将命令更改为
cmd -c junk -s text.txt
如何跟踪哪个参数($2
或$3
)设置为junk
?
我尝试使用 for 循环,但我不知道如何junk
从$@
.
我有这个命令bash
:
cmd -c -s junk text.txt
如果我将命令更改为
cmd -c junk -s text.txt
如何跟踪哪个参数($2
或$3
)设置为junk
?
我尝试使用 for 循环,但我不知道如何junk
从$@
.
您需要在脚本中使用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
从您展示的示例中,该-s
选项似乎只有一个参数,并且junk
在第一个示例中。然而,语义似乎在第二个例子中发生了变化,显然-c
有一个参数,它又是junk
。同样在第二个示例中,它似乎-s
作为text.txt
参数。
一般来说,bash 命令中的参数没有固定的位置,但如果一个选项接受一个参数,它应该直接跟在选项参数之后(在第一种情况下-s
)。
正如 anubhava 所指出的,您可以使用 getopts 来解析脚本的参数。对于您更改整个语义的情况,这仍然不起作用,就像您所做的那样。