我将变量传递akms
给名为 的函数sufx
。我能够正确捕获第二个数组元素并设置变量fskl
。
verbiage
我想要根据的数值设置变量的能力-v
。我该如何为该功能执行此操作sufx
?目前verbiage
只是取一个字符串值。
akms=("-v 3" "INCLUDE")
sufx akms
这是功能
sufx ()
{
typeset -n _akms="$1"
## Capture INCLUDE or EXCLUDE option for grep
local fskl="" verbiage=0
for s in "${_akms[@]}"; do
case $s in
("XCL"|"INCL"|"INCLUDE") fskl="INCLUDE" ;;
("NCL"|"EXCL"|"EXCLUDE") fskl="EXCLUDE" ;;
(*) verbiage=${s#*-v} ;;
esac
done
}
我想,你的意思是:
如何检查数组元素是否属于模式
-v
,然后是“任何东西”,然后是“数字字符”……您可以使用子字符串正则表达式匹配与bash
' 的扩展测试括号和=~
正则表达式运算符 ie来执行此操作[[ "$element" =~ regex ]]
。如何仅提取存储在参数中的字符串的数字字符...您可以使用 的
bash
参数扩展来排除所有非数字字符,例如"${parameter//[^0-9]}"
。因此,结合以上两种方法:
或者,使用 globbing 模式,
case ... esac
例如:另请参阅可以使用 globbing 来搜索文件内容吗?
我建议将
"-v 3"
字符串作为单独的选项字母 + 选项参数传递"-v" "3"
。然后你可以使用 bash shell 的内置选项解析器getopts
来处理它们:用法变成
您甚至可以使用
akms=("-v" "3" -- "INCLUDE")
来显式标记选项的结尾(这将允许您使用以破折号开头的非选项参数)。