我在bash
中有这个命令:
cmd -c -s junk text.txt
如果我将命令更改为
cmd -c junk -s text.txt
如何跟踪哪个参数($2
或$3
)设置为junk
?
我尝试使用for循环,但我不知道如何从junk
找到$@
。
答案 0 :(得分: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
答案 1 :(得分:0)
从您显示的示例中,-s
选项似乎只有一个参数,在第一个示例中为junk
。然而,在第二个例子中,语义似乎发生了变化,显然-c
只接受一个参数,它再次是junk
。同样在第二个示例中,似乎-s
将text.txt
作为参数。
通常,bash命令中的参数没有固定位置,但如果选项接受参数,则应直接遵循option参数(在第一种情况下为-s
)。
正如anubhava所指出的,您可以使用getopts来解析脚本的参数。这仍然不适用于你改变整个语义的情况。