假设我将命令行参数传递给我的 shell 脚本,如下所示:
例如 1) ./myshell_script abcdef
例如 2) ./myshellscript fdebca
我的问题是,如果我想获得始终在参数“b”之后的参数“c”[因为命令行参数可以按任何顺序提供],我如何才能获得始终在参数“b”之后的值“?
假设我将命令行参数传递给我的 shell 脚本,如下所示:
例如 1) ./myshell_script abcdef
例如 2) ./myshellscript fdebca
我的问题是,如果我想获得始终在参数“b”之后的参数“c”[因为命令行参数可以按任何顺序提供],我如何才能获得始终在参数“b”之后的值“?
$ ./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
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
。
不必担心顺序非常值得脚本开头的几行额外的行和调用中的额外字符。
我的shell脚本
#!/bin/bash
grep -oP 'b\s*\K[^ ]+' <<<$*
测试:
% myshellscript a b c d e f
c
% myshellscript f d e b c a
c