Linux 如何获取命令行参数?

Linux 如何获取命令行参数?,linux,Linux,假设我将命令行参数传递给shell脚本,如下所示: 例1)。/myshell\u脚本a b c d e f 例2)。/myshellscript f d e b c a 我的问题是,如果我想得到总是在参数“b”之后的参数“c”[因为命令行参数可以以任何顺序提供],我如何才能得到总是在参数“b”之后的值 代码 使用getopts 最好不要依赖参数顺序,而是使用getopts将它们指定给明确的值。这允许您以/myshell\u script-a-b b-c-d-d e-f f的形式编写东西,这相当于

假设我将命令行参数传递给shell脚本,如下所示:

例1)。/myshell\u脚本a b c d e f

例2)。/myshellscript f d e b c a

我的问题是,如果我想得到总是在参数“b”之后的参数“c”[因为命令行参数可以以任何顺序提供],我如何才能得到总是在参数“b”之后的值

代码

使用
getopts
最好不要依赖参数顺序,而是使用
getopts
将它们指定给明确的值。这允许您以
/myshell\u script-a-b b-c-d-d e-f f
的形式编写东西,这相当于它的任何排列
/myshell script-f-d d d-e-b b-c-a

不必担心顺序,脚本开头的几行额外的行和调用中的额外字符是值得的


myshellscript

#!/bin/bash
grep -oP 'b\s*\K[^ ]+' <<<$*

如您所知,参数编号为
$1
$2
,依此类推。所以你们应该找到b的位置并使用下一个参数。此外,您还可以分析参数列表
$*
。有关详细信息,请阅读
mansh
。@user2930942欢迎!看来你对这个网站还不熟悉。如果任何ANS为您工作,请考虑通过点击空心绿色标记除了ANS.PS。我注意到您还没有接受任何4个问题的ANS。
#!/bin/bash

i=
for p in $@; do

    if [ "$i" == "1" ];then
        echo $p
        exit
    fi
    if [ "$p" == "b" ];then
        i=1
    fi

done
#!/bin/bash
grep -oP 'b\s*\K[^ ]+' <<<$*
% myshellscript a b c d e f
c
% myshellscript f d e b c a
c