我有一个以参数启动的 bash 脚本,我有一个处理参数的函数。我将参数放在一个数组中args=("$@")
。我还有一个可以检查参数是否包含某些元素的函数。
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && { ipos="$i"; return 0; }
done
return 1
}
我希望通过以下能力来改进我的功能;找到参数后,检查下一个参数并查看它们是否包含数字直到找到数组中的下一个非数字元素,把它们放在一个opt[1],opt[2],...的数组中,最好用一个例子来解释;
sh script.sh plt 2 3 g40 All 32
然后我想要函数给我
if containsElement "plt" "${args[@]}" ; then
containsElement "plt" "${args[@]}"
echo ${opt[@]}
fi
给我吗
2 3 g40
数字是每个参数的选项。我可以编写一些东西来做到这一点,但它会变成丑陋的代码,我想学习一种好的方法来实现它。
答案1
我将使用正则表达式来完成,例如:
echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$1$2$3\n"/egx;'
plt 2 3 g40
All 32
不确定这是否是您要找的内容?您可以省略打印每个参数组的第一个字符串,方法是:
echo plt 2 3 g40 All 32|perl -ne's/(\w+) ([\d ]+)(\w+)/print "$2$3\n"/egx;'