0

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

例如 1) ./myshell_script abcdef

例如 2) ./myshellscript fdebca

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

4

3 回答 3

1
$ ./a.sh f d e b c a
c

代码

#!/bin/bash

i=
for p in $@; do

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

done
于 2013-11-01T09:48:21.953 回答
0

使用getopts

最好不要依赖参数顺序,而是使用getopts. 这使您可以将事物编写./myshell_script -a a -b b -c c -d d -d e -f f为等效于它的任何排列./myshellscript -f f -d d -e e -b b -c c -a a

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

关于 Bask-hackers 的 Getopts 教程

于 2013-11-01T09:59:22.540 回答
0

我的shell脚本

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

测试:

% myshellscript a b c d e f
c
% myshellscript f d e b c a
c
于 2013-11-01T10:04:51.317 回答